首先聲明下文中用到很多圖片來源不同文章蓄氧,如果有侵權(quán)問題請(qǐng)告知函似,馬上刪除
1.序言
此文獻(xiàn)給準(zhǔn)備入門或者想了解目前火熱的人工智能技術(shù)的朋友們,首先科普下喉童,人工智能是個(gè)很大的課題缴淋,實(shí)現(xiàn)的方式有傳統(tǒng)的機(jī)器學(xué)習(xí)各種算法,只不過目前效果最好最強(qiáng)大算法是深度學(xué)習(xí)算法,所以現(xiàn)在常說的人工智能技術(shù)一般就是指深度學(xué)習(xí)重抖。
機(jī)器學(xué)習(xí)的概念早在80年代就提出了露氮,由于計(jì)算機(jī)性能的限制,和傳統(tǒng)算法的局限性钟沛,所以沒有大規(guī)模的應(yīng)用畔规,直到2006年深度學(xué)習(xí)算法的出現(xiàn),相比傳統(tǒng)的機(jī)器學(xué)習(xí)算法在很多領(lǐng)域都取得了突破性進(jìn)展恨统,比如 語音識(shí)別 翻譯 領(lǐng)域的進(jìn)展叁扫。目前大公司都非常重視人工智能的布局,目前影響未來最大的2個(gè)技術(shù)我認(rèn)為一是人工智能畜埋、二是基因編輯技術(shù)莫绣。
很多人了解過的人工智能可能只是聽過Alpha Go下圍棋戰(zhàn)勝最強(qiáng)人類選手,人臉識(shí)別悠鞍,自動(dòng)駕駛对室,這些領(lǐng)域,會(huì)覺得這些東西離自己很遙遠(yuǎn)咖祭,認(rèn)為這個(gè)技術(shù)還是概念不像其他開發(fā)語言能實(shí)際拿來做項(xiàng)目掩宜,或者認(rèn)為這技術(shù)非常難,是博士 碩士才能玩得動(dòng)么翰,曾經(jīng)沒人教我牺汤,我自己網(wǎng)上找教程看,動(dòng)不動(dòng)講一堆數(shù)學(xué)公式浩嫌,看來確實(shí)頭大檐迟,差點(diǎn)被嚇退了。但是我告訴你其實(shí)并沒有那么難學(xué)码耐,接下來我會(huì)帶你們從一些基本的概念開始了解锅减,用最直白的話來說明白其中原理。
2.人工智能概覽
目前主流的深度學(xué)習(xí)算法分支大概是這些伐坏,每種算法都是在前人的基礎(chǔ)上吸收了優(yōu)點(diǎn)然后不斷改進(jìn)而來怔匣,特別感謝國外的開源精神,就是這種開源促使了一個(gè)群體加速創(chuàng)新的效應(yīng)桦沉,這幾年深度學(xué)習(xí)發(fā)展得很快每瞒,谷歌為了促進(jìn)深度學(xué)習(xí)在視覺領(lǐng)域的發(fā)展,從2004年開始創(chuàng)辦的ImageNet視覺競賽纯露。ImageNet 中含有超過 1500 萬由人手工注釋的圖片剿骨,也就是帶標(biāo)簽的圖片,標(biāo)簽說明了圖片中的內(nèi)容埠褪,超過 2.2 萬個(gè)類別浓利。其中挤庇,至少有 100 萬張里面提供了邊框(bounding box)上圖中SLIM分類中的網(wǎng)絡(luò)就是近幾年內(nèi)取得冠軍的網(wǎng)絡(luò)。直到2017年宣布這個(gè)比賽宣布停止了贷掖,因?yàn)槟壳白詈玫木W(wǎng)絡(luò)識(shí)別率已經(jīng)達(dá)到了97%的精度嫡秕,在某種程度上已經(jīng)超過了人眼。所以沒必要再舉辦下去了苹威。
我簡要說明下這些算法分支的應(yīng)用領(lǐng)域吧
CNN: 主要用于計(jì)算機(jī)視覺領(lǐng)域昆咽,包括分類識(shí)別和目標(biāo)檢測
RNN:主要應(yīng)用領(lǐng)域是有時(shí)序特征的數(shù)據(jù),比如語音識(shí)別牙甫、翻譯掷酗、NLP自然語言處理、天氣預(yù)測窟哺、股票量化投資等
GAN:自編碼特征工程泻轰、圖像風(fēng)格遷移、圖片自動(dòng)上色且轨、圖像的超分辨率修復(fù)等等
強(qiáng)化學(xué)習(xí):主要應(yīng)用在游戲領(lǐng)域浮声,業(yè)內(nèi)開源框架openAI 提供了很多基本的操作,就是讓ai模擬人來玩游戲殖告,能學(xué)習(xí)游戲的策略,不斷改進(jìn)自己雳锋,就像Alpha Go那樣
3.目前主流的深度學(xué)習(xí)框架
目前TensorFlow 整體排名第一黄绩,是目前最流行的深度學(xué)習(xí)框架,資料豐富玷过,文檔多爽丹,基于Python語言容易上手,Keras是一個(gè)上層的封裝框架辛蚊,就是把Tensorflow粤蝎、Theano、CNTK 再封裝一遍袋马,可以切換不同的后端網(wǎng)絡(luò)初澎,不過我建議新手還是從Tensorflow 框架開始,熟悉了之后再去用Keras虑凛。
4.什么是線性可分碑宴,線性不可分
我們從最簡單的分類問題入手
首先說下神經(jīng)網(wǎng)絡(luò)神經(jīng)元的一個(gè)基本數(shù)學(xué)表達(dá)式:y=f(wx+b)?
y就是輸出,f是個(gè)非線性激活函數(shù)桑谍,w代表權(quán)重延柠,x是輸入,b代表偏置 锣披,別急這些概念通過下面的例子慢慢了解
我們要把圖中X和O 分開贞间,這種情況很簡單贿条,一條直線就能做到, y=wx+b? 比如現(xiàn)在輸入一個(gè)數(shù)字 帶入方程得到的Y在直線的右上方增热,就是X這個(gè)分類整以,在直線左下方就是O分類,這是最簡單的情況下钓葫,如果數(shù)據(jù)變成這樣
還能用一條直線分開嗎悄蕾?答案是否定的,那怎么辦呢础浮?
這是在二維空間不能帆调,那映射到多維空間
,映射也很簡單豆同,傳統(tǒng)機(jī)器學(xué)習(xí)叫核函數(shù)番刊,深度學(xué)習(xí)力叫非線性的激活函數(shù)比如Sigmod
這種函數(shù)很多,這只是舉個(gè)例子影锈,wx+b 主要做一些線性的變化芹务,比如旋轉(zhuǎn),平移鸭廷,放大縮小枣抱,來區(qū)分二維情況下的數(shù)據(jù),加上非線性激活函數(shù)后辆床,就是會(huì)把數(shù)據(jù)扭曲佳晶,變形 比如下圖1 無法使用一個(gè)超平面將藍(lán)色和紅色區(qū)域切割開,經(jīng)過扭曲 變形成圖2后就能分割開了
可以發(fā)開這個(gè)網(wǎng)址?http://playground.tensorflow.org? 體驗(yàn)一下數(shù)據(jù)的流動(dòng)讼载,變化鼻吮,最后把它們切分開
4.什么是神經(jīng)網(wǎng)絡(luò)歹苦?
上圖是一個(gè)生物上的神經(jīng)元须妻,細(xì)胞周圍那些突觸就是接收信號(hào)顿涣,然后神經(jīng)元計(jì)算處理,然后發(fā)射給下一個(gè)神經(jīng)元計(jì)算一喘,數(shù)學(xué)家應(yīng)用數(shù)學(xué)模仿這個(gè)原理發(fā)明了這種算法驱还,因此命名為神經(jīng)網(wǎng)絡(luò)。
就用這圖來說明吧:
上圖中 i1? i2 就是輸入特征數(shù)據(jù)凸克, h1 h2 就是2個(gè)神經(jīng)元铝侵,這2個(gè)神經(jīng)元組成一個(gè)隱藏層,o1,o2 是輸出触徐,我們稱為輸出層咪鲜,神經(jīng)網(wǎng)絡(luò)就是由一個(gè)輸入層,多層隱藏層撞鹉,一個(gè)輸出層組成的一個(gè)網(wǎng)絡(luò)疟丙。
以上圖為例子颖侄,輸入層一般代表我們數(shù)據(jù)的特征,如果是圖片就是每個(gè)像素點(diǎn)的值享郊,還可以是其他特征數(shù)據(jù)览祖,舉個(gè)生活中的例子吧,比如追女生炊琉,輸入就是你的特征展蒂,身高 年齡 顏值 才藝? 薪水 等等,比如你和你朋友同時(shí)追2個(gè)女生苔咪,2個(gè)女生就是這2個(gè)隱藏層的神經(jīng)元锰悼,你的這些特征經(jīng)過女生1的大腦神經(jīng)元,每個(gè)特征有不同的重要程度团赏,就是你的每個(gè)特征乘以一個(gè)w 分配不同的權(quán)重箕般,然后把每個(gè)特征乘以權(quán)重(就是在女生心中的重要程度),然后女生心中就有一個(gè)答案就是輸出舔清。假設(shè)女生1最終輸入要等于1才符合她男朋友的標(biāo)準(zhǔn)丝里,女生2要輸出2才符合,? 假設(shè)你是喜歡女生1体谒,但是你的特征經(jīng)過女生大腦神經(jīng)元計(jì)算輸出后是0.5杯聚,說明你的有些地方做的還不夠好,要去把好的做得更好抒痒,不好的改掉(這里如果對(duì)應(yīng)程序幌绍,輸入的數(shù)據(jù)是不可能改的,這只是為了故事連接评汰,實(shí)際程序做得是纷捞,讓女生調(diào)整對(duì)你特征的權(quán)重比例)痢虹,達(dá)到她喜歡的輸出1被去。其實(shí)深度學(xué)習(xí)就是這個(gè)原理,輸入一堆的數(shù)據(jù)奖唯,這些數(shù)據(jù)特征乘上不同的權(quán)重+偏置項(xiàng)惨缆,為了輸出的值不會(huì)偏差太大,會(huì)用一個(gè)非線性的函數(shù)來激活丰捷,稱為激活函數(shù)坯墨,常用的有sigmod 、Relu 病往,函數(shù)也很簡單 就是把你的值壓縮到-1~1之間 0~1之間捣染。
那通過不斷的更新這些權(quán)重,達(dá)到預(yù)期的效果停巷,比如你成功追到來女生1耍攘,你朋友追到來女生2榕栏,那我們最終學(xué)習(xí)到的模型就是 女生1喜歡什么樣的男生,女生2喜歡什么樣的男生蕾各,然后過段時(shí)間你們都分手了扒磁,然后要給她們介紹男朋友,我們學(xué)習(xí)到了上次的模型式曲,就可以直接對(duì)男生進(jìn)行篩選妨托,把男生的特征輸入這個(gè)神經(jīng)網(wǎng)絡(luò)模型,這些特征跟訓(xùn)練好的權(quán)重相乘吝羞,計(jì)算兰伤,就能得到你是屬于哪個(gè)女生喜歡的類型。這就是最簡單的神經(jīng)網(wǎng)絡(luò)中的分類識(shí)別模型脆贵。模型學(xué)習(xí)的就是医清,不同特征的權(quán)重,使得輸入的數(shù)據(jù)經(jīng)過權(quán)重的計(jì)算輸出跟我們預(yù)期的分類相符合卖氨,這也是有監(jiān)督學(xué)習(xí)最基本的分類模型
如果還不明白会烙,我們用上面的圖中的數(shù)值帶入網(wǎng)絡(luò)來計(jì)算一遍就明白了,首先公式是
不用怕 很簡單的計(jì)算筒捺,L代表的是神經(jīng)網(wǎng)絡(luò)的層柏腻,J代表是L層的第J個(gè)神經(jīng)元,K代表輸入的特征個(gè)數(shù)系吭,? σ 就是上面說的非線性激活函數(shù)五嫂, w 就是神經(jīng)元對(duì)每個(gè)特征的權(quán)重,a代表就是輸入的特征數(shù)據(jù)肯尺,b是偏置項(xiàng)沃缘,就是一個(gè)數(shù)字,? ?上述公式用文字來描述就是则吟,輸入K個(gè)特征 分別和L層的第J個(gè)神經(jīng)元連接的權(quán)重相乘槐臀,然后加上L層第J個(gè)神經(jīng)元的偏置,然后輸入到激活函數(shù)氓仲,? ?每個(gè)特征和每個(gè)權(quán)重相乘加上偏置項(xiàng)求和水慨,然后輸入一個(gè)激活函數(shù),就得出這個(gè)神經(jīng)元計(jì)算的結(jié)果敬扛,具體到上面圖中 計(jì)算h1=sigmod((0.5*0.15+0.1*0.25)+0.1))? h2 同理晰洒,算出結(jié)果,比如h1=0.35(沒具體算啥箭,就是一個(gè)-1~1的數(shù)字)谍珊,h2=0.26. 然后經(jīng)過輸出層,輸出層也有2個(gè)神經(jīng)元急侥,同理砌滞,2個(gè)特征 h1 h2 乘以2個(gè)權(quán)重 求和 非線性激活 得到輸出值炼七。這樣每個(gè)輸入特征和每個(gè)神經(jīng)元都進(jìn)行連接運(yùn)算,我們稱為 全連接網(wǎng)絡(luò)布持, 全連接網(wǎng)絡(luò)?的缺點(diǎn)就是參數(shù)太多豌拙。我們?cè)倥e個(gè)例子,就是學(xué)習(xí)深度學(xué)習(xí)里的hello word?
5.全連接網(wǎng)絡(luò)
手寫數(shù)字的識(shí)別:首先準(zhǔn)備數(shù)據(jù)集题暖,大概圖片長這樣按傅,訓(xùn)練樣本有6萬張,測試樣本1000張
輸入圖片是28*28的單通道灰度圖胧卤,我們根據(jù)上面的模式來搭建一個(gè)全連接網(wǎng)絡(luò)
輸入28*28=784 個(gè)特征唯绍,隱藏層假設(shè)我們放1024個(gè)神經(jīng)元,根據(jù)我們前面說的枝誊,每個(gè)特征都要和每個(gè)神經(jīng)元連接的權(quán)重相乘况芒,我們來計(jì)算一下參數(shù)的個(gè)數(shù),就是784*1024=802816 個(gè)參數(shù)叶撒,這還只是一層的參數(shù)绝骚,如果多層這些參數(shù)更可怕,所以后面會(huì)引入CNN卷積神經(jīng)網(wǎng)絡(luò)來減少參數(shù)祠够。最后輸出9個(gè)數(shù)字分類的概率压汪,我們用one-hot形式來表示,就是一個(gè)長度為10的向量古瓤,每一位上代表是該數(shù)字分類的概率止剖,最后一位表示不是數(shù)字,比如 數(shù)字2 的表示為 0100000000落君,數(shù)字3表示為001000000穿香,這里在介紹一個(gè)分類會(huì)用到的sofrmax,?這個(gè)也很簡單,比如我們得到輸出Y1值為5绎速,y2=3,y3=2,? 那么 y1的概率=5/10=0.5? y2=3/10=0.3 y3=2/10=0.2, 取最大概率的那個(gè)為最終的分類皮获。以上先介紹了全連接網(wǎng)絡(luò)的概念以及缺點(diǎn)。
6.神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程
一個(gè)完整神經(jīng)網(wǎng)絡(luò)分為2步朝氓,前向傳播計(jì)算魔市,反向傳播主届,通常很多教程說的BP算法赵哲,這也是整個(gè)神經(jīng)網(wǎng)絡(luò)的核心基礎(chǔ)。先來說前向傳播君丁,前向傳播比較簡單枫夺,就是我們把數(shù)據(jù)喂入神經(jīng)網(wǎng)絡(luò),經(jīng)過前面神經(jīng)元的連接和權(quán)重的相乘計(jì)算绘闷,到最后經(jīng)過一個(gè)全連接層橡庞,最后輸出
反向傳播
我們每一層那些W 權(quán)重和 B 就是我們要訓(xùn)練的參數(shù)较坛,假設(shè)我們輸入一個(gè)數(shù)字經(jīng)過了網(wǎng)絡(luò)最后輸出是3,跟我們預(yù)期的答案5扒最,那我們首先得求這個(gè)偏差丑勤,叫做損失,專門計(jì)算這些損失的方法叫做損失函數(shù)吧趣,損失函數(shù)的計(jì)算方法有很多種法竞,常用的有均方誤差,交叉熵等等强挫。舉個(gè)例子均方誤差就是
根據(jù)求出的損失岔霸,來推算出前面的W權(quán)重該怎么更新。這就要用到數(shù)學(xué)里面的求導(dǎo)了俯渤。導(dǎo)數(shù)我簡單介紹下也很簡單呆细,導(dǎo)數(shù)就是來求函數(shù)的變化率的,因?yàn)槲覀兪墙?jīng)過一層一層的函數(shù)計(jì)算得到的結(jié)果八匠,所以要用到鏈?zhǔn)角髮?dǎo)法則來求每個(gè)函數(shù)的偏導(dǎo)數(shù)絮爷,從結(jié)果到倒數(shù)第一層開始計(jì)算偏導(dǎo)數(shù),然后一層一層往回計(jì)算梨树,計(jì)算出了偏導(dǎo)數(shù)略水,乘以一個(gè)學(xué)習(xí)率就是W要調(diào)整的數(shù)值,這個(gè)計(jì)算還是很復(fù)雜的劝萤,不過都不用我們自己寫渊涝,框架早就幫我們封裝好了,我們只要了解下里面的原理懂得怎么計(jì)算的就 行了床嫌。 具體的推導(dǎo)過程可以看看
https://www.cnblogs.com/charlotte77/p/5629865.html 這篇寫得不錯(cuò)跨释。
7.CNN卷積神經(jīng)網(wǎng)絡(luò)
首先來看下什么是卷積操作,卷積其實(shí)就是 比如一個(gè) 3*3的小窗口厌处,里面放著不同的權(quán)重參數(shù)鳖谈,然后在一張圖上滑動(dòng),小窗口的每個(gè)數(shù)值跟圖上重疊部分相乘阔涉,然后把這9個(gè)格子的得到的結(jié)果再相加起來缆娃,得到一個(gè)數(shù)字,每次滑動(dòng)1個(gè)格子 這個(gè)叫步長瑰排,比如上圖5*5的圖 用3*3的卷積之后得到的是一個(gè)3*3的圖贯要。卷積的用處就是提取圖片的特征,通過增加不同的卷積核來提取不同的特征椭住,然后經(jīng)過多層的網(wǎng)絡(luò)后網(wǎng)絡(luò)會(huì)去學(xué)習(xí)組合這些特征崇渗。下面看一張圖
第一層經(jīng)過卷積之后,可能網(wǎng)絡(luò)只學(xué)習(xí)到一些局部的特征,比如眼睛宅广,眉毛 嘴巴等葫掉。經(jīng)過深度的網(wǎng)絡(luò)之后,開始組合這些特征跟狱,學(xué)習(xí)到能代表這個(gè)圖片的特征經(jīng)過一個(gè)全連接層輸出結(jié)果俭厚。
卷積的最大好處就是降低參數(shù)數(shù)量,它是利用權(quán)值共享來減少參數(shù)驶臊,什么意思呢套腹,一個(gè)卷積核代表的就是一種特征,在一張圖上提取特征這些權(quán)值都是一樣的资铡。
說到卷積电禀,就不得不說下池化,池化分為平均池化笤休,和最大池化尖飞,池化一般就是跟在卷積層后面,同樣還是為了降維店雅,池化也是一個(gè)核套在圖上滑動(dòng)政基,平均池化就是把窗口里的值求平均,最大池化顧名思義就是取最大的那個(gè)闹啦。均值池化可以保留圖片的背景特征沮明,最大池化可以突出圖片的輪廓特征
卷積還有一個(gè)概念需要了解叫填充padding
padding就是在你的輸入數(shù)據(jù)旁邊補(bǔ)0,比如5*5的圖 用3*3卷積核去卷積窍奋,步長1荐健,滑動(dòng)第3步的時(shí)候發(fā)現(xiàn)右邊跟你的卷積核少了一列,這時(shí)候pading就是給這一列補(bǔ)上0,琳袄。padding 后卷積后的 寬度 長度 計(jì)算公式就是 輸入的長/步長 江场。如果沒有padding 那計(jì)算公式就是 入長-核長+1/步長
我們接下來來具體看一個(gè)卷積神經(jīng)網(wǎng)絡(luò)
推導(dǎo)一下是不是就是很清晰了。其他的卷積網(wǎng)絡(luò)都差不多窖逗,網(wǎng)絡(luò)的層數(shù)越多址否,特征的表達(dá)能力越強(qiáng),不過也帶來另一個(gè)問題碎紊,就是反向求梯度的時(shí)候佑附,容易造成梯度消失,所以后來ResNet 殘差網(wǎng)絡(luò)提出了跨層連接的思想仗考,解決了這個(gè)問題音同,使網(wǎng)絡(luò)深度達(dá)到了152層。
總結(jié)
再寫下去可能篇幅太長了痴鳄,還是分篇幅來寫吧瘟斜,目標(biāo)檢測網(wǎng)絡(luò)里還是有些算法需要去推導(dǎo)一下才能理解,然后再去應(yīng)用痪寻,這些算法都是吸收了先前各種版本的優(yōu)點(diǎn)不斷改進(jìn)螺句。大家如果想入門可以去了解一下Tensorflow? 這個(gè)框架,上手寫幾個(gè)例子就入門了橡类。個(gè)人認(rèn)為AI技術(shù)落地應(yīng)用化現(xiàn)在是個(gè)好時(shí)機(jī)了蛇尚,各大公司都在布局,目前由于計(jì)算的瓶頸很多計(jì)算還是放在云端顾画,但是蘋果似乎是 想把AI應(yīng)用本地化取劫,今年發(fā)布的A12芯片,就是專門對(duì)AI計(jì)算優(yōu)化的研侣,每秒可計(jì)算5萬億次谱邪,包括蘋果從IOS11開始推出的Meta 結(jié)合了Opengl opencl? 來處理異構(gòu)計(jì)算框架,支持分類網(wǎng)絡(luò)庶诡,語音識(shí)別惦银,自然語言處理等神經(jīng)網(wǎng)絡(luò),這是個(gè)很大的機(jī)會(huì)末誓〕毒悖互聯(lián)網(wǎng)現(xiàn)在要?jiǎng)?chuàng)新我覺得一個(gè)方向就是需要結(jié)合AI的能力來賦能你的產(chǎn)品,做出創(chuàng)新喇澡。