我是一個(gè)平平無(wú)奇的AI神經(jīng)元
我是一個(gè)AI神經(jīng)元
我是一個(gè)AI神經(jīng)元,剛剛來(lái)到這個(gè)世界上,一切對(duì)我來(lái)說(shuō)都特別新奇。
之所以叫這個(gè)名字,是因?yàn)槲业墓ぷ饔悬c(diǎn)像人類(lèi)身體中的神經(jīng)元。
人體中的神經(jīng)元可以傳遞生物信號(hào),給它輸入一個(gè)信號(hào),它經(jīng)過(guò)處理后再輸出一個(gè)信號(hào)傳遞給別的神經(jīng)元,最終傳遞到大腦完成對(duì)一個(gè)信號(hào)的決策和處理。
聰明的計(jì)算機(jī)科學(xué)家們受到啟發(fā),在代碼程序里發(fā)明了我:神經(jīng)元函數(shù)。
在我們的世界里,我只是普普通通的一員,像我這樣的神經(jīng)元有成百上千,甚至上萬(wàn)個(gè),我們按照層的形式,組成了一個(gè)龐大的神經(jīng)網(wǎng)絡(luò)。
很快我和隔壁工位的大白開(kāi)始混熟了,他比我來(lái)得早,對(duì)這里要熟悉的多。
聽(tīng)大白告訴我說(shuō),我們這個(gè)神經(jīng)網(wǎng)絡(luò)是一個(gè)圖像識(shí)別的AI程序,只要給我們輸入一張狗的照片,我們就能告訴你這是一只柯基,還是泰迪、柴犬、二哈···
神經(jīng)元結(jié)構(gòu)
在大白的指引下,我很快就學(xué)會(huì)了怎么工作。
雖然我們叫神經(jīng)元,名字聽(tīng)起來(lái)挺神秘的,但實(shí)際上我就是一個(gè)普通函數(shù),有參數(shù),有返回值,普通函數(shù)有的我都有:
- def neuron(a):
- w = [...]
- b = ...
- ...
我有一個(gè)參數(shù)a,這個(gè)參數(shù)是一個(gè)數(shù)組,里面的每一個(gè)元素我把它分別叫做a1,a2,a3···用這個(gè)a來(lái)模擬我這個(gè)神經(jīng)元收到的一組信號(hào)。
人類(lèi)的神經(jīng)元是怎么處理輸入的生物信號(hào)我不知道,我估計(jì)挺復(fù)雜的。但在我這里就很簡(jiǎn)單:我給每一個(gè)輸入值設(shè)定一定的權(quán)重,然后做一個(gè)簡(jiǎn)單的加權(quán)求和,最后再加上一個(gè)偏移值就行啦!
所以我還有一個(gè)數(shù)組叫做w,就是權(quán)重weight的意思,里面的每一個(gè)元素我叫做w1,w2,w3···,至于那個(gè)偏移值,就叫它bias。
如此一來(lái)我的工作你們也該猜到了,就是把傳進(jìn)來(lái)的a里面的每個(gè)元素和w里的每一個(gè)元素做乘法,再加起來(lái),最后加上偏移值,就像這樣:
說(shuō)到這里,我突然想到一個(gè)問(wèn)題,打算去問(wèn)問(wèn)大白。
“大白,這些要計(jì)算的數(shù)據(jù)都是從哪里來(lái)的呢?”
“是上一層的神經(jīng)元們送過(guò)來(lái)的”
“那他們的數(shù)據(jù)又是哪來(lái)的呢?”,我刨根問(wèn)題的問(wèn)到。
大白帶我來(lái)到了門(mén)口,指向另外一個(gè)片區(qū)說(shuō)到,“看到了嗎?那里是數(shù)據(jù)預(yù)處理部門(mén),他們負(fù)責(zé)把輸入的圖片中的像素顏色信息提取出來(lái),交給我們神經(jīng)網(wǎng)絡(luò)部門(mén)來(lái)進(jìn)行分析。”
“交給我們?然后呢”
“咱們這個(gè)神經(jīng)網(wǎng)絡(luò)就像一臺(tái)精密的機(jī)器,我們倆只是其中兩個(gè)零件,不同的權(quán)重值某種意義上代表了對(duì)圖片上不同位置的像素關(guān)心程度。一旦開(kāi)動(dòng)起來(lái),喂給我們圖片數(shù)據(jù),我們每一個(gè)神經(jīng)元就開(kāi)始忙活起來(lái),一層層接力,把最終的結(jié)果輸出到分類(lèi)器,最終識(shí)別出狗的品種。”
神經(jīng)網(wǎng)絡(luò)訓(xùn)練
正聊著,突然,傳來(lái)一陣廣播提示音,大家都停止了閑聊,回到了各自工位。
“這是要干啥,這么大陣仗?”,我問(wèn)大白。
“快坐下,馬上要開(kāi)始訓(xùn)練了”,大白說(shuō)到。
“訓(xùn)練?訓(xùn)練什么?”
“咱們用到的那些權(quán)重值和偏移值你以為怎么來(lái)的?就是通過(guò)不斷的訓(xùn)練得出來(lái)的。”
還沒(méi)說(shuō)到幾句話,數(shù)據(jù)就開(kāi)始送過(guò)來(lái)了。按照之前大白教給我的,我將輸入數(shù)據(jù)分別乘以各自的權(quán)重,然后相加,最后再加上偏移bias,就得到了最后的結(jié)果,整個(gè)過(guò)程很輕松。
我準(zhǔn)備把計(jì)算結(jié)果交給下一層的神經(jīng)元。
大白見(jiàn)狀趕緊制止了我,“等一下!你不能直接交出去”
“還要干嘛?”
大白指了一下我背后的另一個(gè)家伙說(shuō)到:“那是激活函數(shù),得先交給他處理一下”
“激活函數(shù)是干嘛的?”,我問(wèn)大白。
“激活,就是根據(jù)輸入信號(hào)量的大小去激活產(chǎn)生對(duì)應(yīng)大小的輸出信號(hào)。這是在模仿人類(lèi)的神經(jīng)元對(duì)神經(jīng)信號(hào)的反應(yīng)程度大小,好比拿一根針去刺皮膚,隨著力道的加大,身體的疼痛感會(huì)慢慢增強(qiáng),差不多是一個(gè)道理。”
聽(tīng)完大白的解釋?zhuān)尹c(diǎn)了點(diǎn)頭,好像明白了,又好像不太明白。
后來(lái)我才知道,這激活函數(shù)還有好幾種,經(jīng)常會(huì)打交道的有這么幾個(gè):
- sigmoid
- tanh
- relu
- leaky relu
激活函數(shù)處理完后,總算可以交給下一層的神經(jīng)元了,我準(zhǔn)備稍事休息一下。
剛坐下,就聽(tīng)到大廳的廣播:
隨后,又來(lái)了一組新的數(shù)據(jù),看來(lái)我是沒(méi)時(shí)間休息了,趕緊再次忙活了起來(lái)。
這一忙不要緊,一直搞了好幾個(gè)小時(shí),來(lái)來(lái)回回重復(fù)工作了幾萬(wàn)次,我都快累癱了。
損失函數(shù) & 優(yōu)化方法
趁著休息的空當(dāng),我又和大白聊了起來(lái)。
“大白,剛剛咱們這么來(lái)來(lái)回回折騰了幾萬(wàn)次,這是在干啥啊?”
大白也累的上氣不接下氣,緩了緩才說(shuō)到:“這叫做網(wǎng)絡(luò)訓(xùn)練,通過(guò)讓我們分析大量不同品種狗的圖片,讓我們訓(xùn)練出合適的權(quán)重和偏移值,這樣,我們就變得會(huì)認(rèn)識(shí)狗品種了,以后正式工作的時(shí)候給我們新的狗的圖片,咱們也能用學(xué)到的知識(shí)去分辨啦!”
“那到底是怎么訓(xùn)練的,你給我說(shuō)說(shuō)唄”,我繼續(xù)問(wèn)到。
“你剛才也看到了,廣播里不斷通知更新權(quán)重和偏移值。這訓(xùn)練就是通過(guò)不斷的嘗試修改每一層神經(jīng)元的權(quán)重值和偏移值,來(lái)不斷優(yōu)化,找到最合適的數(shù)值,讓我們對(duì)狗的種類(lèi)識(shí)別準(zhǔn)確率最好!”,大白說(shuō)到。
“不斷嘗試修改?這么多神經(jīng)元,難不成看運(yùn)氣瞎碰?”
大白給了我一個(gè)白眼,“怎么可能瞎試,那得試到猴年馬月去了。咱們這叫深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò),是能夠自學(xué)習(xí)的!”
他這么一說(shuō)我更疑惑了,“怎么個(gè)學(xué)習(xí)法呢?”
“其實(shí)很簡(jiǎn)單,咱們先選一組權(quán)重偏移值,做一輪圖片識(shí)別,然后看識(shí)別結(jié)果和實(shí)際結(jié)果之間的差距有多少,把差距反饋給咱們后,再不斷調(diào)整權(quán)重和偏移,讓這個(gè)差距不斷縮小,直到差距接近于0,這樣咱們的識(shí)別準(zhǔn)確率就越接近100%”
“額,聽(tīng)上去好像很簡(jiǎn)單,不過(guò)我還有好多問(wèn)題啊。怎么去衡量這個(gè)差距呢?具體怎么調(diào)整權(quán)重偏移呢?調(diào)整幅度該多大好呢?”,我小小的腦袋一下冒出了許多的問(wèn)號(hào)。
大白臉上露出了不可思議的表情,“小伙子,不錯(cuò)嘛!你一下問(wèn)出了神經(jīng)網(wǎng)絡(luò)的三個(gè)核心概念。”
“是哪三個(gè)?快給我說(shuō)說(shuō)”
大白喝了口水,頓了頓接著說(shuō)到,“首先,怎么去衡量這個(gè)差距?這個(gè)活,咱們部門(mén)有個(gè)人專(zhuān)門(mén)干這活,他就是損失函數(shù),他就是專(zhuān)門(mén)來(lái)量化咱們的輸出結(jié)果和實(shí)際結(jié)果之間的差距。量化的辦法有很多種,你空了可以去找他聊聊”
“那第二個(gè)呢?”
“第二個(gè),具體怎么調(diào)整,這也涉及到咱們神經(jīng)網(wǎng)絡(luò)中一個(gè)核心概念,他就是優(yōu)化方法,咱們部門(mén)用的最多的是一個(gè)叫梯度下降的方法。那玩意兒有點(diǎn)復(fù)雜,一時(shí)半會(huì)兒給你說(shuō)不清楚,大概差不多就是用求導(dǎo)數(shù)的方式尋找如何讓損失函數(shù)的損失值變小”,大白繼續(xù)耐心的解釋著。
“好吧,那第三個(gè)核心概念是什么?”
“你剛不是問(wèn)調(diào)整幅度嗎?這個(gè)調(diào)整幅度太小了不行,這樣咱們訓(xùn)練的太慢了,那得多訓(xùn)練很多回。太大了也不行,要是一不小心錯(cuò)過(guò)了那個(gè)最優(yōu)值,損失函數(shù)的結(jié)果就會(huì)來(lái)回?fù)u擺,不能收斂,所以有一個(gè)叫學(xué)習(xí)速率的數(shù)值,通常需要程序員們憑借經(jīng)驗(yàn)去設(shè)定”
我還沉浸在大白的講解中,廣播聲再次響起:
看來(lái)程序員修改了學(xué)習(xí)速率,我只好打起精神,繼續(xù)去忙了,真不知道何時(shí)才能訓(xùn)練達(dá)標(biāo)啊~
本文轉(zhuǎn)載自微信公眾號(hào)「 編程技術(shù)宇宙」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系 編程技術(shù)宇宙公眾號(hào)。