原文鏈接:
https://mp.weixin.qq.com/s/PB_n8woxdsWPtrmL8BbehA
機(jī)器學(xué)習(xí)下包含神經(jīng)網(wǎng)絡(luò)、深度學(xué)習(xí)等,他們之間的關(guān)系表示如圖2-7所示。
圖2-7 關(guān)系圖
那么什么是機(jī)器學(xué)習(xí)、深度學(xué)習(xí)、他們的區(qū)別又是什么呢?
2.7.1 什么是機(jī)器學(xué)習(xí)?
機(jī)器學(xué)習(xí)是 人工智能 (AI) 和計(jì)算機(jī)科學(xué)的一個分支,專注于使用數(shù)據(jù)和算法來模仿人類的學(xué)習(xí)方式(構(gòu)建“學(xué)習(xí)”方法),逐步提高其準(zhǔn)確性,模擬或?qū)崿F(xiàn)人類的學(xué)習(xí)行為。機(jī)器學(xué)習(xí)是一門多領(lǐng)域交叉學(xué)科,涉及概率論、統(tǒng)計(jì)學(xué)、逼近論、凸分析、算法復(fù)雜度理論等多門學(xué)科。
傳統(tǒng)機(jī)器學(xué)習(xí)的研究方向主要包括決策樹、隨機(jī)森林、人工神經(jīng)網(wǎng)絡(luò)、貝葉斯學(xué)習(xí)等方面的研究。這些在2.6章節(jié)的OpenCV庫介紹中有所提及。
機(jī)器學(xué)習(xí)是通過算法使系統(tǒng)自行學(xué)習(xí)和改進(jìn)的過程。機(jī)器學(xué)習(xí)的最終目標(biāo)是設(shè)計(jì)能夠自動幫助系統(tǒng)收集數(shù)據(jù)并使用該數(shù)據(jù)來學(xué)習(xí)更多信息的算法。系統(tǒng)應(yīng)在收集的數(shù)據(jù)中尋找模式,并使用它們?yōu)樽约鹤龀鲋匾獩Q策。機(jī)器學(xué)習(xí)涉及到的7大步驟,如圖2-8所示。
圖2-8 機(jī)器學(xué)習(xí)的步驟
總的來說,機(jī)器學(xué)習(xí)正在讓系統(tǒng)像人類一樣思考和行動,展示與人類相似的智能,并賦予它們大腦。在實(shí)際應(yīng)用中,常見的機(jī)器學(xué)習(xí)用于:
? 將垃圾郵件與正常電子郵件分類;
? 物體和圖像識別;
? 檢測假新聞;
? 理解書面或口頭語言;
? 服務(wù)機(jī)器人;
? 自動駕駛汽車 ;
總之,機(jī)器學(xué)習(xí)程序可以像人類一樣從經(jīng)驗(yàn)(或者準(zhǔn)確地說是數(shù)據(jù))中學(xué)習(xí)。當(dāng)接觸到新數(shù)據(jù)時(shí),這些應(yīng)用程序會自行學(xué)習(xí)、成長、改變和拓展。換句話說,機(jī)器學(xué)習(xí)可以通過迭代達(dá)到預(yù)測和實(shí)際最小差距的預(yù)測。機(jī)器學(xué)習(xí)在未來將會被更多的應(yīng)用和接受。
2.7.2 機(jī)器學(xué)習(xí)如何工作?
筆者認(rèn)為,機(jī)器學(xué)習(xí)的工作原理主要分為決策和誤差損失優(yōu)化2部分。
機(jī)器學(xué)習(xí)過程首先將已標(biāo)記的訓(xùn)練數(shù)據(jù)輸入到選定的算法中。算法將將會對這些已標(biāo)記或未標(biāo)記數(shù)據(jù)進(jìn)行估計(jì),并產(chǎn)生預(yù)測值,然后決策是否進(jìn)行參數(shù)調(diào)整。該過程稱為決策過程。
如果預(yù)測和結(jié)果不匹配,算法會被重新訓(xùn)練多次,直到數(shù)據(jù)科學(xué)家得到想要的結(jié)果。通過誤差函數(shù)(損失函數(shù))量化預(yù)測和真實(shí)值間的差距。這使機(jī)器學(xué)習(xí)算法能夠不斷地自行學(xué)習(xí)并產(chǎn)生最佳答案,并隨著時(shí)間的推移逐漸提高準(zhǔn)確性。如果模型可以更好地?cái)M合訓(xùn)練集中的數(shù)據(jù),則調(diào)整權(quán)重以減少真實(shí)與模型預(yù)測之間的差異。該算法將重復(fù)這個“評估和優(yōu)化”過程,自主更新權(quán)重,直到達(dá)到準(zhǔn)確度閾值。
2.7.3 機(jī)器學(xué)習(xí)有哪些不同類型?
機(jī)器學(xué)習(xí)很復(fù)雜,目前主要分為3個方法,監(jiān)督學(xué)習(xí)、非監(jiān)督學(xué)習(xí)、強(qiáng)化學(xué)習(xí)。實(shí)際中,大約 70% 的機(jī)器學(xué)習(xí)是有監(jiān)督學(xué)習(xí),而無監(jiān)督學(xué)習(xí)占 10% 到 20%。其余部分由強(qiáng)化學(xué)習(xí)承擔(dān)。
2.7.3.1.監(jiān)督學(xué)習(xí)
在監(jiān)督學(xué)習(xí)中,我們使用已知或標(biāo)記的數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)。由于數(shù)據(jù)是已知的,因此被稱為監(jiān)督學(xué)習(xí)。輸入數(shù)據(jù)經(jīng)過機(jī)器學(xué)習(xí)算法并用于訓(xùn)練最后產(chǎn)出模型。根據(jù)已知數(shù)據(jù)訓(xùn)練產(chǎn)出模型后,可以將未知數(shù)據(jù)用于模型并獲得新的響應(yīng)。
特點(diǎn):
有標(biāo)簽
有反饋
預(yù)測分類或者數(shù)值等結(jié)果
舉例,將蘋果和梨子的圖片分別標(biāo)記為0和1,便有標(biāo)簽為0的蘋果和標(biāo)簽為1的梨子,對這樣的已知圖片和標(biāo)簽進(jìn)行訓(xùn)練,然后使用模型預(yù)測水果,模型算法會嘗試確定圖片是蘋果還是梨子的百分比。
以下是目前用于監(jiān)督學(xué)習(xí)的算法列表:
多項(xiàng)式回歸
隨機(jī)森林
線性回歸
邏輯回歸
決策樹
K-最近鄰
樸素貝葉斯
支持向量機(jī)(SVM)
在神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)中也會有監(jiān)督學(xué)習(xí)的應(yīng)用。智能輪式自主移動機(jī)器人也會用到監(jiān)督學(xué)習(xí)。
接下來了解一下無監(jiān)督學(xué)習(xí)。
2.7.3.2.無監(jiān)督學(xué)習(xí)
無監(jiān)督學(xué)習(xí),也稱為無監(jiān)督機(jī)器學(xué)習(xí),使用機(jī)器學(xué)習(xí)算法對未標(biāo)記的數(shù)據(jù)集進(jìn)行分析和聚類。在無監(jiān)督學(xué)習(xí)中,訓(xùn)練數(shù)據(jù)是未知且未標(biāo)記的——這意味著沒有人看過這些數(shù)據(jù)。該數(shù)據(jù)被送到機(jī)器學(xué)習(xí)算法并用于訓(xùn)練模型。訓(xùn)練后的模型嘗試搜索模式并給出所需的結(jié)果。這些算法無需人工干預(yù)即可發(fā)現(xiàn)隱藏的模式或數(shù)據(jù)分組或者存在的規(guī)律。
例如,在中國有一句俗語,“物以類聚,人以群分,三觀不合,無需強(qiáng)融”,“道不同不相為謀”,將一群人放在一起,無監(jiān)督學(xué)習(xí)算法會發(fā)現(xiàn)其中因三觀造成的問題,從而將人自動分為壞人和好人。
這種方法發(fā)現(xiàn)信息相似性和差異性的能力使其成為探索性數(shù)據(jù)分析、模糊數(shù)據(jù)提取、銷售策略、客戶分類以及圖像和模式識別的理想選擇。
它還可以通過降維方法減少模型中的特征數(shù)量。主成分分析 (PCA) 和奇異值分解 (SVD) 是這方面的兩種常用方法。另外,無監(jiān)督學(xué)習(xí)中使用的其他算法包括神經(jīng)網(wǎng)絡(luò)、k 均值聚類和概率聚類方法。
特點(diǎn):
無標(biāo)簽
無反饋
總結(jié)出潛在的規(guī)律
如上圖2-7所示的例子中,|“魚龍混雜”,未知圖像由好壞的人組成。經(jīng)過訓(xùn)練的模型試圖將它們放在一起,但算法可能通過探索分析通過 三觀后,得出不同的人群分類。
目前用于無監(jiān)督學(xué)習(xí)的前 7 種算法是:
偏最小二乘
模糊的意思
奇異值分解
K-means 聚類
先驗(yàn)的
層次聚類
主成分分析
在神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)中也會有無監(jiān)督學(xué)習(xí)的應(yīng)用。
智能輪式自主移動機(jī)器人也會用到監(jiān)督學(xué)習(xí)。
2.7.3.3.強(qiáng)化學(xué)習(xí)
強(qiáng)化機(jī)器學(xué)習(xí)是一種類似于監(jiān)督學(xué)習(xí)的機(jī)器學(xué)習(xí)模型,但該算法不是使用樣本數(shù)據(jù)進(jìn)行訓(xùn)練的。該模型通過反復(fù)試驗(yàn)不斷學(xué)習(xí)。通過獎懲機(jī)制,更多成功的結(jié)果讓程序得到加強(qiáng),針對給定問題制定最佳建議或政策。換句話說,與傳統(tǒng)類型的數(shù)據(jù)分析一樣,算法也是通過反復(fù)試驗(yàn)來發(fā)現(xiàn)數(shù)據(jù),然后決定哪些行動會帶來更高的回報(bào)獎勵(reward)。
強(qiáng)化學(xué)習(xí)由三個主要組成部分組成:代理、環(huán)境和動作。代理是學(xué)習(xí)者或決策者,環(huán)境包括代理與之交互的所有內(nèi)容,動作就是代理所做的。機(jī)器人就是代理。
當(dāng)代理選擇在給定時(shí)間內(nèi)最大化預(yù)期獎勵的動作時(shí),就會發(fā)生強(qiáng)化學(xué)習(xí)。當(dāng)代理在健全的策略框架內(nèi)工作時(shí),這是最容易實(shí)現(xiàn)的。
特點(diǎn):
決策處理
獎懲機(jī)制
學(xué)習(xí)-行動產(chǎn)出
2.7.3.4小結(jié)
通過本節(jié)內(nèi)容可知道,機(jī)器學(xué)習(xí)種類繁多,意味著需要有一定場景甄別能力。
機(jī)器學(xué)習(xí)的運(yùn)用大大的考驗(yàn)我們的分析能力,因?yàn)橹挥袑?shù)據(jù)場景有著清晰的認(rèn)識才能選擇合適的機(jī)器學(xué)習(xí)方法。
三類學(xué)習(xí)各有優(yōu)劣,也都能同時(shí)解決同類問題,這時(shí)需要從更多的角度考慮問題,比如成本、穩(wěn)定、性能等方面。
筆者總結(jié)了一些機(jī)器人場景下的模型應(yīng)用。
機(jī)器人防碰撞 強(qiáng)化學(xué)習(xí)、監(jiān)督學(xué)習(xí)
機(jī)器人運(yùn)行模式 識別 監(jiān)督學(xué)習(xí)
機(jī)器人視覺分類 圖像SVM等
機(jī)器人IMU 9軸陀螺儀 監(jiān)督學(xué)習(xí)
2.7.4 如何決定使用哪種機(jī)器學(xué)習(xí)算法?
有數(shù)十種不同的算法可供選擇,但沒有哪種算法能夠“一勞永逸”。在許多情況下,必須進(jìn)行反復(fù)試驗(yàn)才能獲得一個理想的結(jié)果。選擇什么樣的方法可以通過一些特點(diǎn)來縮小范圍。
想獲取什么樣的結(jié)果,0或1還是具體數(shù)值或者其他?
使用的數(shù)據(jù)大小是多少,大批量或小批量?
使用什么類型的數(shù)據(jù),維度、時(shí)間序列、圖像矩陣?
希望從數(shù)據(jù)中獲得什么樣的特征,維度、時(shí)間序列、圖像矩陣?
對數(shù)據(jù)認(rèn)識足夠清晰,這些“清晰的認(rèn)識”將如何使用?
數(shù)據(jù)量太大,是否選擇降維算法提取數(shù)據(jù)?
提示:原始數(shù)據(jù)包含大量信息——挑戰(zhàn)在于識別重要的模式和變量。決策樹、因子分析、缺失值比和隨機(jī)森林等降維算法可以幫助您找到相關(guān)細(xì)節(jié)。
2.7.5 機(jī)器學(xué)習(xí)的最佳編程語言是什么?
目前根據(jù)受歡迎的程度來看,那么 Python最 “得意”了,這要?dú)w功于許多可用的庫以及廣泛的支持。Python 是數(shù)據(jù)分析和數(shù)據(jù)挖掘的理想選擇,并支持許多算法(用于分類、聚類、回歸和降維)和機(jī)器學(xué)習(xí)模型。
機(jī)器學(xué)習(xí)是一個奇妙的新科學(xué)分支,正在慢慢接管日常生活。從定向廣告到癌細(xì)胞識別,機(jī)器學(xué)習(xí)無處不在。
例如當(dāng)前流行的框架pytorch、tensorflow keras 都是基于python擴(kuò)大根據(jù)地的。
當(dāng)然,機(jī)器學(xué)習(xí)的開發(fā)語言還有c?c++,在機(jī)器人終端,除了python之外,c/c++絕對是更合適的語言,因?yàn)闄C(jī)器人對響應(yīng)速度要求較高,而c?c++能做到這些。
2.7.6 機(jī)器學(xué)習(xí)步驟
在第2.7.1章節(jié)提到過步驟,本章節(jié)具體說明。它可以分為7個主要步驟:
2.7.6.1 收集數(shù)據(jù)
數(shù)據(jù)分為多維序列數(shù)據(jù)和圖片數(shù)據(jù)、時(shí)間序列數(shù)據(jù)。
例如:
由3個震動傳感器采集的數(shù)據(jù)組成3維的數(shù)據(jù)。
圖片是二維矩陣數(shù)據(jù)。
聲音屬于時(shí)間序列數(shù)據(jù)。
收集可靠的數(shù)據(jù)至關(guān)重要,這樣您的機(jī)器學(xué)習(xí)模型才能找到正確的工作模式。如果有不正確或過時(shí)的數(shù)據(jù),將得到錯誤結(jié)果或預(yù)測。
例如質(zhì)量好的數(shù)據(jù)是相關(guān)的,包含很少的缺失值和重復(fù)值,沒有干擾性和隨機(jī)性,并且可以很好地表示存在的標(biāo)簽類別。
數(shù)據(jù)的收集可以采用仿真環(huán)境的模式,這樣可以收集干凈的數(shù)據(jù),有必要,需要根據(jù)實(shí)際環(huán)境收集數(shù)據(jù)。收集數(shù)據(jù)由于量大所以需要考慮其批量處理能力和自動話能力。
2.7.6.2 準(zhǔn)備數(shù)據(jù):
獲得數(shù)據(jù)后首先對數(shù)據(jù)進(jìn)行整理,如果是圖片需要刪除不清晰的圖片??梢酝ㄟ^以下方式執(zhí)行優(yōu)化:
均一化。
隨機(jī)化;將您擁有的所有數(shù)據(jù)放在一起并隨機(jī)化。這有助于確保數(shù)據(jù)均勻分布,并且排序不會影響學(xué)習(xí)過程。
清理數(shù)據(jù)以刪除不需要的數(shù)據(jù)、缺失值、行和列、重復(fù)值、數(shù)據(jù)類型轉(zhuǎn)換等。
可視化數(shù)據(jù)可以方筆了解結(jié)構(gòu)并了解各種變量和存在的類之間的關(guān)系。將清理后的數(shù)據(jù)分成兩組——一個訓(xùn)練集和一個測試集。訓(xùn)練集是您的模型從中學(xué)習(xí)的集合。測試集用于在訓(xùn)練后檢查模型的準(zhǔn)確性。
例如某數(shù)據(jù)集的文件路勁為訓(xùn)練集(train)和驗(yàn)證集(val),通過via標(biāo)注工具各生成一個區(qū)域標(biāo)注的標(biāo)簽文件(后綴為json)。
lid@LAPTOP-85KPM8J9:/mnt/e/machineLearn/buildings_datasets$ tree -L 2
.
├── train
│ ├── 0000002_0003951_0000003_0000759.jpg
│ ├── 0004-0143409_p.jpg
│ ├── 0004-0143410_i.jpg
…
│ └── via_region_data.json
└── val
├── P2VBr3KZuYBOF1QA-DIRrQ.jpg
├── P3dr3y0NZpnQsTcjIW-x9U.jpg
├── P4we3TZeMBwNVD2Q8KyegQ.jpg
…
├── via_region_data.json
數(shù)據(jù)集存在的形式可以自定義,但最終需要通過程序讀取,所以,為了更快的讀取數(shù)據(jù)集,可以遵循常見的數(shù)據(jù)集結(jié)構(gòu),例如pasvoc,minisit等。
2.7.6.3 選擇模型:
機(jī)器學(xué)習(xí)模型確定在收集的數(shù)據(jù)上運(yùn)行機(jī)器學(xué)習(xí)算法后獲得的輸出。選擇與手頭任務(wù)相關(guān)的模型很重要。多年來,科學(xué)家和工程師開發(fā)了適用于語音識別、圖像識別、預(yù)測、分類等不同任務(wù)的各種模型。
例如從分類還是預(yù)測的角度選擇:
例如預(yù)測房價(jià)、預(yù)測速度、預(yù)測角度等具體數(shù)值時(shí)需要回歸類的模型不需要分類的模型,對應(yīng)的激活函數(shù)也會有不同的選擇。
從數(shù)據(jù)的結(jié)構(gòu)選擇模型:
圖像數(shù)據(jù)可以選擇卷積網(wǎng)絡(luò)、聲音選擇時(shí)間序列模型等。
2.7.6.4 訓(xùn)練模型:
訓(xùn)練是機(jī)器學(xué)習(xí)中最重要的一步。在訓(xùn)練中,您將準(zhǔn)備好的數(shù)據(jù)傳遞給機(jī)器學(xué)習(xí)模型以查找模式并進(jìn)行預(yù)測。它導(dǎo)致模型從數(shù)據(jù)中學(xué)習(xí),以便它可以完成任務(wù)集。隨著時(shí)間的推移,通過訓(xùn)練,模型在預(yù)測方面變得更好。
使用keras或者pytorch 現(xiàn)有的訓(xùn)練框架,能夠省區(qū)很多編碼訓(xùn)練模型的時(shí)間,另外訓(xùn)練時(shí)通過matlotlib可視化可以幫助分析訓(xùn)練的效果如何。
例如pytorc通過構(gòu)建迭代、優(yōu)化、反向傳播構(gòu)建訓(xùn)練器。
TrainSize,SensorNNData,SensorNNLabels = PreprocessData()
print ('Total Epoch %d,epoch TrainSize %d' %(NumEpochs,TrainSize))
loss_vals= []
for j in range(NumEpochs):#迭代器
losses = 0
for i in range(TrainSize):
input_values = Variable(SensorNNData[i])
labels = Variable(SensorNNLabels[i])
#print(input_values)
#print(labels)
# Forward + Backward + Optimize
optimizer.zero_grad()#每次訓(xùn)練需要清除梯度
outputs = net(input_values)#需要訓(xùn)練的網(wǎng)絡(luò)
loss = criterion(outputs, labels)
loss.backward()#反向傳播
optimizer.step()#優(yōu)化器
losses += loss.item()#損失函數(shù)
2.7.6.5 評估模型:
訓(xùn)練模型后,您必須檢查它的性能。
通過在以前看不見的數(shù)據(jù)上測試模型的性能來完成的。
這個時(shí)候測試集就起到作用了,環(huán)環(huán)相扣。
注意:不要用訓(xùn)練的相同數(shù)據(jù)進(jìn)行測試, 無法獲得準(zhǔn)確的測量結(jié)果,因?yàn)槟P鸵呀?jīng)使用了數(shù)據(jù),并在其中找到了與以前相同的模式。
評估模型也可以通過多次訓(xùn)練設(shè)置不同的參數(shù)得到不同的結(jié)果來分析對比。
2.7.6.6 參數(shù)調(diào)優(yōu):
創(chuàng)建并評估模型后,看看是否可以通過任何方式提高其準(zhǔn)確性。這是通過調(diào)整模型中存在的參數(shù)來完成的。參數(shù)是程序員通常決定的模型中的變量。在您的參數(shù)的特定值下,精度將是最大值。參數(shù)調(diào)整是指找到這些值。文章來源:http://www.zghlxwxcb.cn/news/detail-458434.html
2.7.6.7 做出預(yù)測
最后,您可以使用您的模型對看不見的數(shù)據(jù)進(jìn)行準(zhǔn)確的預(yù)測。文章來源地址http://www.zghlxwxcb.cn/news/detail-458434.html
到了這里,關(guān)于人工智能與機(jī)器人|機(jī)器學(xué)習(xí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!