機(jī)器學(xué)習(xí)與神經(jīng)網(wǎng)絡(luò)
作為產(chǎn)品經(jīng)理起碼要了解算法的原理以及它的邊界和優(yōu)勢,能夠知道在不同場景下應(yīng)用什么算法什么模型可以達(dá)到目的。
一、機(jī)器學(xué)習(xí)的現(xiàn)狀和瓶頸
機(jī)器學(xué)習(xí)如今已算是在互聯(lián)網(wǎng)圈家喻戶曉的名詞了?,F(xiàn)實(shí)生活中其實(shí)也早有很多應(yīng)用,什么無人駕駛,人臉識別,智能音響等等。去年七月國家發(fā)布了《新一代人工智能發(fā)展規(guī)劃》,說明人工智能領(lǐng)域已經(jīng)上升到了國家戰(zhàn)略層面。身邊一直羨慕的土豪朋友們五年后的長線股也都已經(jīng)買好了。五年后的事情我不知道,但是對我印象最深的就是去年互聯(lián)網(wǎng)大會,原先人們口中的互聯(lián)網(wǎng)現(xiàn)在都改名叫傳統(tǒng)互聯(lián)網(wǎng)了。當(dāng)我們還在理解什么是機(jī)器學(xué)習(xí)的時候,別人已經(jīng)開公司幫人制定解決方案了。
實(shí)際上當(dāng)前機(jī)器學(xué)習(xí)作為工具商業(yè)化較為廣泛的還是在B端,比如一些金融公司會輸出自己的風(fēng)控能力、反作弊能力。在一些高精密工業(yè)領(lǐng)域通過AR+AI的技術(shù),已經(jīng)可以幫助技術(shù)人員迅速測量出儀器的指標(biāo),并將相關(guān)數(shù)據(jù)回傳至控制系統(tǒng)中。大大滴減少了技術(shù)人員手工測量的工作,同時也減少了人工測量數(shù)據(jù)的誤差。更多的應(yīng)用場景比如安防領(lǐng)域,通過人臉識別技術(shù)可以快速記錄出入人員,從而把非結(jié)構(gòu)化數(shù)據(jù)變成結(jié)構(gòu)化。
不過機(jī)器學(xué)習(xí)也并不是在所有領(lǐng)域都能發(fā)揮出巨大作用,起碼是在現(xiàn)在這個階段。機(jī)器學(xué)習(xí)很多情況是需要很多標(biāo)注數(shù)據(jù)來供機(jī)器進(jìn)行學(xué)習(xí),通過對標(biāo)注數(shù)據(jù)不斷的學(xué)習(xí)和優(yōu)化從而使其建立一個泛化的模型,當(dāng)新的數(shù)據(jù)通過這個模型時機(jī)器便會對其進(jìn)行分類或者預(yù)測。
比如說如果要判斷一個病人是否患有血管癌,就需要有大量被標(biāo)注的血管病變數(shù)據(jù)。但這些標(biāo)注數(shù)據(jù)的工作是需要非常有臨床經(jīng)驗(yàn)的醫(yī)生一個一個的去判斷和標(biāo)注的。一方面是有經(jīng)驗(yàn)的專家醫(yī)生很少,另一方面對于這類數(shù)據(jù)本身數(shù)量也有限。另外醫(yī)療行業(yè)對于模型的準(zhǔn)確率要求肯定不會亞于無人駕駛。所以不可否認(rèn)機(jī)器學(xué)習(xí)的應(yīng)用的確有它的強(qiáng)大之處,但在不同領(lǐng)域中充滿的挑戰(zhàn)也非常多。
二、神經(jīng)網(wǎng)絡(luò)算法
按照慣例,簡單介紹一下神經(jīng)網(wǎng)絡(luò)。
1、神經(jīng)元
人類對事物的感知是通過無數(shù)個神經(jīng)元通過彼此鏈接而形成的一個巨大神經(jīng)網(wǎng)絡(luò),然后每層神經(jīng)元會將接收到的信號經(jīng)過處理后逐層傳遞給大腦,最后再由大腦做出下一步?jīng)Q策。神經(jīng)網(wǎng)絡(luò)算法實(shí)際上就是在模仿這一生物原理。
2、監(jiān)督無監(jiān)督
神經(jīng)網(wǎng)絡(luò)算法是屬于有監(jiān)督學(xué)習(xí)的一種。有監(jiān)督學(xué)習(xí)實(shí)際上就是需要有大量的被標(biāo)注數(shù)據(jù)供其學(xué)習(xí)。反之無監(jiān)督就是不需要事先對數(shù)據(jù)進(jìn)行標(biāo)注,而是利用算法挖掘數(shù)據(jù)中潛在的規(guī)律,比如一些聚類算法。那么半監(jiān)督學(xué)習(xí),相信也不難理解。
3、權(quán)重參數(shù)
神經(jīng)網(wǎng)絡(luò)算法中的最小單元即為神經(jīng)元,一個神經(jīng)元可能會接受到n個傳遞過來的數(shù)據(jù)。每條數(shù)據(jù)在輸入神經(jīng)元時都需要乘以一個權(quán)重值w,然后將n個數(shù)據(jù)求和,在加上偏置量b。這時得到的值與該神經(jīng)元的閾值進(jìn)行比較,最后在通過激活函數(shù)輸出處理結(jié)果。
4、線性與非線性
實(shí)際上算法本身最核心的是一個線性函數(shù)y=wx+b。w為權(quán)重值,b為偏置量,x為輸入數(shù)據(jù),y為輸出數(shù)據(jù)。當(dāng)我們在處理某些數(shù)據(jù)時,理想情況是這些數(shù)據(jù)為線性可分的。這樣只要我們找到這條直線的w和b就可以作為某個模型來對數(shù)據(jù)進(jìn)行分類或預(yù)測了。如下圖:
但事實(shí)上大部分的數(shù)據(jù)并不是線性可分的,或者說一條直線無法很好的表達(dá)這些數(shù)據(jù)集。這時候怎么辦呢?這時候一般情況下就會通過增加多個神經(jīng)元以及激活函數(shù)來使模型擬合數(shù)據(jù)集。
5、激活函數(shù)
那么,什么是激活函數(shù)?說白了,激活函數(shù)就是一個能把線性函數(shù)掰彎的函數(shù)。比如下面的這組數(shù)據(jù)我們是無法通過一條直線將紅藍(lán)兩種數(shù)據(jù)分隔開。但是通過激活函數(shù),我們甚至可以將一條直線掰成一個圓。這樣我們就可以將兩組數(shù)據(jù)分隔開了。
所以理論上,我們可以將一條直線做任意的變化使其更加貼近數(shù)據(jù)集,并選取一條最優(yōu)曲線即為我們期望的最終訓(xùn)練模型。那么我們的目標(biāo)就很明確了。
6、優(yōu)化器
但是如何才能找到這么一條曲線?這時候我們可以引入一系列的優(yōu)化算法,比如梯度下降。通過優(yōu)化算法對函數(shù)求導(dǎo)我們可以使模型中的參數(shù)逐漸貼近真實(shí)值。同時在優(yōu)化過程中還需要加入損失函數(shù)。
7、損失函數(shù)
什么是損失函數(shù)?損失函數(shù)說白了可以理解成為一個驗(yàn)收者。損失函數(shù)會去衡量測試數(shù)據(jù)中的結(jié)果與實(shí)際值的偏差情況。如果偏差較大就要告訴優(yōu)化函數(shù)繼續(xù)優(yōu)化直到模型完全收斂。常用的損失函數(shù)如:交叉熵、平方差等。
8、過擬合欠擬合
不過需要注意的是,如果我們的曲線完美的擬合了所有數(shù)據(jù),那么這條曲線是否即為我們模型的最優(yōu)曲線呢?答案是否定的。這里我們還需要考慮一個模型泛化的問題。如果我們訓(xùn)練了一個模型,但是這個模型僅能在訓(xùn)練數(shù)據(jù)集中發(fā)揮很大效用,那么它實(shí)際的應(yīng)用意義其實(shí)并不大。我們需要的是通過這個模型能夠讓我們了解到我們未知的信息,而不是已知的。所以我們并不希望這條曲線能夠穿過所有的數(shù)據(jù),而是讓它盡可能的描繪出這個數(shù)據(jù)集。為了防止模型過擬合可以嘗試增加訓(xùn)練數(shù)據(jù)同時減小模型復(fù)雜度。同樣我們也不可能讓這條曲線完全偏離數(shù)據(jù)集。
三、深度學(xué)習(xí)框架
自己推導(dǎo)算法?自己設(shè)計(jì)模型?不存在的…大神們早就幫你封裝好了。安心做一個調(diào)包俠吧。
沒有訓(xùn)練數(shù)據(jù)?沒有測試樣本?不存在的…大神們早就幫你準(zhǔn)備好了。安心做一個調(diào)參狗吧。
什么?還是不知道怎么做?不存在的!下面讓你秒變機(jī)器學(xué)習(xí)大神(裝逼狗)。
Keras
機(jī)器學(xué)習(xí)的框架這里就不枚舉了,不過Keras還是非常值得提一下。相比Tensorflow,Keras更容易新手上手,封裝的更加高級。建議在嘗試使用框架前先了解或?qū)W習(xí)一下python,然后直接Keras中文文檔吧。
那么如何秒變大神?Keras框架中其實(shí)已經(jīng)內(nèi)置了很多預(yù)訓(xùn)練好的模型,如ResNet50圖片分類器。你只需要將下圖中的代碼復(fù)制到你的Keras框架中并運(yùn)行。然后泡一杯咖啡,想象自己已經(jīng)成為吳恩達(dá)一樣的大神。靜靜的等待著深藏功與名的那一刻的到來。
大概半小時的時間,模型下載安裝完畢。激動人心的時刻終于來臨,趕快來測一下這個模型。從百度上隨便搜索了一張貓的圖片,并將圖片的大小改為224*224像素。然后將圖片放到項(xiàng)目的根目錄中(不要忘記修改代碼中的圖片名稱),最后運(yùn)行程序。你會發(fā)現(xiàn)模型不僅能識別出來是一只貓,并且還知道是一只波斯貓。驚不驚喜?刺不刺激?是不是有很多小圖片想要嘗試?趕快玩起來吧。
通過對這個模型的封裝以及作為產(chǎn)品經(jīng)理的你,相信也可以YY出很多好玩的應(yīng)用。雖然通過Keras中的預(yù)置模型可以讓我們快速體驗(yàn)機(jī)器學(xué)習(xí)的能力,但是個人建議最好還是自己手動搭建一套簡單的模型會更加幫助理解。Keras是通過Sequential模型線性堆疊網(wǎng)絡(luò)層。其中一些常用的層Keras已經(jīng)封裝好了,同時上面說到的激活函數(shù)、優(yōu)化器、損失函數(shù)等等也都是任君挑選的。所以想要通過Keras搭建自己的模型其實(shí)也不難。上述內(nèi)容實(shí)際上也只是一個拋磚引玉,至少個人也是通過這些才開始對機(jī)器學(xué)習(xí)感興趣的。
想要成為機(jī)器學(xué)習(xí)大神?困難的確存在。不過,作為產(chǎn)品經(jīng)理起碼要了解算法的原理以及它的邊界和優(yōu)勢,能夠知道在不同場景下應(yīng)用什么算法什么模型可以達(dá)到目的。
最后感謝大家的瀏覽,若文中存在理解有誤的地方還望大神指出。
本文由 @宗瀚zone 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 Pixabay,基于 CC0 協(xié)議
只想喊一句:大神
想問一下“每條數(shù)據(jù)在輸入神經(jīng)元時都需要乘以一個權(quán)重值w,然后將n個數(shù)據(jù)求和,在加上偏置量b。這時得到的值與該神經(jīng)元的閾值進(jìn)行比較,最后在通過激活函數(shù)輸出處理結(jié)果?!遍撝挡皇撬^的偏置值bm嗎?
打錯了 是b不是bm
厲害,膜拜,求更多產(chǎn)出
先收藏