xianrenb 2018-3-5 12:34
好像未見過有人解釋為何 artificial neural network 效率可以好高。
我想到一個看來合理的解釋如下。
正常一個 neural network 會有好多層 layer 。
如果將近 input 的 layers ,看成是多個 neural network ,後面的 layers 就是將前面的 layers 的結果運算。
前面的 layer/neural network ,可以有工作效率差,也可以好。
好的意思是預測的結果,比較符合 training 的 data ,可以產生較小的 error 。
而這些 error ,training 時已經用數學方法,合理地從最後的 output layer ,逐層計回至前面所說的接近 input 的 layer 。
如果這些 input layer ,有工作好的,有工作差的,最合理的方法就是選取最佳那個的結果來用。
其次的合理方法,就是每個結果乘上一個 weight ,加起來用。
training 時,按 error 的大小,調節 weights 的數值。
然而,上面說的兩種方法,正正就是構成 neural network 的根本方法。
換言之, neural network 可說是一種從 n 種亂估算法中,找出一套合理的結合方法得出有用的結果。
舉例來說,如果是辨認手寫數目字,接近 input 的一部份 neural network 是“完全亂估”地提供中途數值的話,“準確率”也有 10% ,又或者“錯誤率”是 90% 。
如果用上兩份 neural network ,再結合結果的話,“準確率”也就一定大於 10% 。
或者可以合理地推想,兩份都錯的“錯誤率”約等於 0.9*0.9 = 81% 。
用上 n 份的話,“錯誤率”就可以好接近 0% 了!
結論就是, neural network 是因為每層的結合方法有效率,而最終成為一個有效率的整體。
Susan﹏汪汪 2018-3-5 16:37
之前發現的
[url=https://github.com/hetelek/Neural-Network-Playground]https://github.com/hetelek/Neural-Network-Playground[/url]
D code 唔似好多
只可以係iPad 的Swift Playgrounds 上玩
xianrenb 2018-3-5 18:46
[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2018-3-5 04:37 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476344462&ptid=27287870][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
之前發現的
[url=https://github.com/hetelek/Neural-Network-Playground]https://github.com/hetelek/Neural-Network-Playground[/url]
D code 唔似好多
只可以係iPad 的Swift Playgrounds 上玩 [/quote]
約略看過,看來 d code 不太易讀。
我認為 neural network 的重點是做 back propagation 計 gradient 。
相關的 code 看來是:
[url=https://github.com/hetelek/Neural-Network-Playground/blob/master/Neural%20Network.playground/Sources/Network.swift]https://github.com/hetelek/Neural-Network-Playground/blob/master/Neural%20Network.playground/Sources/Network.swift[/url][code]...
for row in 0..<weightGradients.rows {
for col in 0..<weightGradients.columns {
weightGradients[row][col] = error[row][0] * allTransformedActivations[index][col][0]
}
}
...[/code]講真,我真的看不明。
而對比來說, ConvNetJS 有 ConvLayer :
[url=https://github.com/karpathy/convnetjs/blob/master/src/convnet_layers_dotproducts.js]https://github.com/karpathy/convnetjs/blob/master/src/convnet_layers_dotproducts.js[/url][code]...
var chain_grad = this.out_act.get_grad(ax,ay,d); // gradient from above, from chain rule
for(var fy=0;fy<f.sy;fy++) {
var oy = y+fy; // coordinates in the original input array coordinates
for(var fx=0;fx<f.sx;fx++) {
var ox = x+fx;
if(oy>=0 && oy<V_sy && ox>=0 && ox<V_sx) {
for(var fd=0;fd<f.depth;fd++) {
// avoid function call overhead (x2) for efficiency, compromise modularity :(
var ix1 = ((V_sx * oy)+ox)*V.depth+fd;
var ix2 = ((f.sx * fy)+fx)*f.depth+fd;
f.dw[ix2] += V.w[ix1]*chain_grad;
V.dw[ix1] += f.w[ix2]*chain_grad;
}
}
}
}
this.biases.dw[d] += chain_grad;
...[/code]及 FullyConnLayer :[code]...
for(var i=0;i<this.out_depth;i++) {
var tfi = this.filters[i];
var chain_grad = this.out_act.dw[i];
for(var d=0;d<this.num_inputs;d++) {
V.dw[d] += tfi.w[d]*chain_grad; // grad wrt input data
tfi.dw[d] += V.w[d]*chain_grad; // grad wrt params
}
this.biases.dw[i] += chain_grad;
}
...[/code]比較易讀。
基本上看這些已大概明白 neural network 是如何運作了。
我看,其實 neural network 的實際運作,比起一般人想像的要簡單很多。
只是專家們用的詞彙比較難於理解吧了。
assembly.jc 2018-3-5 20:12
[quote]原帖由 [i]xianrenb[/i] 於 2018-3-5 06:46 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476351891&ptid=27287870][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
約略看過,看來 d code 不太易讀。
我認為 neural network 的重點是做 back propagation 計 gradient 。
相關的 code 看來是:
[url=https://github.com/hetelek/Neural-Network-Playground/blob/master/Neural%20]https://github.com/hetelek/Neural-Network-Playground/blob/master/Neural%20[/url] ... [/quote]
其實 Implements Gradient Descent 的公式並不複雜,只需短短十幾行,
[url=https://github.com/assembly-jc/adhoc/blob/master/nn/GradientDescent.java]https://github.com/assembly-jc/adhoc/blob/master/nn/GradientDescent.java[/url]
困難在於點解要計 Cost function 的 gradient,這些需要先了解 Directional Derivative 或者 Taylor's Theorem。
退一歩說,programmer 不需了解原因,但要知道公式如何推算出來,還需要用手計一計 Cost Function 的 partial derivative,即 where C : Cost Function, W[i]i[/i] : [i]i[/i] element of weight vector
[quote] ∂C∕∂W[i]i [/i][/quote]
xianrenb 2018-3-5 21:00
[quote]原帖由 [i]assembly.jc[/i] 於 2018-3-5 08:12 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476356155&ptid=27287870][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
其實 Implements Gradient Descent 的公式並不複雜,只需短短十幾行,
[url=https://github.com/assembly-jc/adhoc/blob/master/nn/GradientDescent.java]https://github.com/assembly-jc/adhoc/blob/master/nn/GradientDescent.java[/url]
困難在於點解要計 Cost function 的 gradient,這些需要先 ... [/quote]
ConvNetJS 把 gradient 放在 .dw 中。
這樣做 d code 易明好多。
而且它有提供多款 trainer :
[url=https://github.com/karpathy/convnetjs/blob/master/src/convnet_trainers.js]https://github.com/karpathy/convnetjs/blob/master/src/convnet_trainers.js[/url]
雖然我未學過,但見到 code 中要用到 gradient data 。
所以以獨立的 field 存 gradient 是一個很好的方法。
xianrenb 2018-3-5 21:57
[quote]原帖由 [i]xianrenb[/i] 於 2018-3-5 09:00 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476358745&ptid=27287870][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
ConvNetJS 把 gradient 放在 .dw 中。
這樣做 d code 易明好多。
而且它有提供多款 trainer :
[url=https://github.com/karpathy/convnetjs/blob/master/src/convnet_trainers.js]https://github.com/karpathy/convnetjs/blob/master/src/convnet_trainers.js[/url]
雖然我未學過,但見到 code 中要 ... [/quote]
我曾經唔明白點解 gradient 是乘數字至前一層 layer 而不是除。
後來看了 [url=https://en.wikipedia.org/wiki/Delta_rule]https://en.wikipedia.org/wiki/Delta_rule[/url] 就明。
即是要 optimize 的是 (target output - actual output)^2 相關的數字。
煙民母親生賤種
*** 作者被禁止或刪除 內容自動屏蔽 ***
xianrenb 2018-3-6 09:23
[quote]原帖由 [i]煙民母親生賤種[/i] 於 2018-3-6 02:36 AM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476374319&ptid=27287870][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
呢個應該無可能, 因為違反因果論。好簡單的一個公式, fib(n). 要知道第 11 層的結果是什麼 (例如: 有幾多個 5 , 有幾多個 2, 或第 2 個數字 + 第 3 個數字是單還是雙等等), 就必定要到第 11 步才知道。怎麼可能靠預測 ... [/quote]
我的意思是,每層 neural network layer ,都可以假設前一層(近 input )的 layer 是亂估的。
然後每層的工作,就是每個該層 neuron 用前一層的 output ,每個配上一個 weight ,再加起來用。
其實還要經過 activation function 。
我看這是要加些 non-linear 的效果,否則多層的效果等於一層。
說回配 weight 的情況, training 時就會調節 weight 的數值。
對於單一層而言,每個 weight 與每個 input 對 output 的影響是對稱的。
weight 數值較大,代表相關的 input (即是前一層的 output)對 output 影響較大。
所以 training 時或 backpropagation 計 gradient 時,就是把 error 值盡量分到最大 weight 值的 input 。
換言之,就是近 output (activation) 的 gradient 直接乘 weight 就等於 input (activation) 的 gradient 。
因為(單層)對稱,近 output (activation) 的 gradient 直接乘 input (activation) 就等於 weight 的 gradient 。
這樣的修正或 training 效果就有效、合理。
也就是每層調整 weight 來達至忽略前一層錯誤的部份 neural network 。
然而這樣的 training 不斷重複執行,最終就變成 neural network 的每一層、每一部份都有合理的調整,而發揮整體運算高效率的效果。
xianrenb 2018-3-6 18:09
[quote]原帖由 [i]xianrenb[/i] 於 2018-3-5 09:57 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476362096&ptid=27287870][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
我曾經唔明白點解 gradient 是乘數字至前一層 layer 而不是除。
後來看了 [url=https://en.wikipedia.org/wiki/Delta_rule]https://en.wikipedia.org/wiki/Delta_rule[/url] 就明。
即是要 optimize 的是 (target output - actual output)^2 相關的數字。 [/quote]
先前說到我曾經唔明白點解 gradient 是乘數字至前一層 layer 而不是除,其實是我把 Newton's method 及 gradient descent 混淆了。
前者是找 root 的方法,後者是找 optimization / 找 local minimum 的方法。
初看當問題是找 root 也行,但實際上用除的方法有情況行不通。
如當 weight 早已調整至接近 0 時,除以 weight 等於乘無限大,不可能計算出有用的結果出來。
MagpiesHK 2018-3-7 09:53
[quote]原帖由 [i]xianrenb[/i] 於 2018-3-5 12:34 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476330380&ptid=27287870][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
好像未見過有人解釋為何 artificial neural network 效率可以好高。
我想到一個看來合理的解釋如下。
正常一個 neural network 會有好多層 layer 。
如果將近 input 的 layers ,看成是多個 neural network , ... [/quote]
記得幾個月前,有個帖子話懷疑NN係學術作假:lol
樓主有心去研究NN,值得讚賞,不過有幾點是錯了:
1. 樓主想講的是"準確率",不是"效率"。效率是另一個Topic
2. 最basic的NN其實不怎樣高,真正高"準確率"的是如CNN(convolutional neural network)般的Architecture. 熟習了NN後建議樓主花點時間去睇下CNN
3. NN並非如樓主所講,前面的layer是random. 並非如此,前面的layer也是有其用處的。如果真是random的話,做back propagation根本不用涉及前面的layer
xianrenb 2018-3-7 11:17
[quote]原帖由 [i]MagpiesHK[/i] 於 2018-3-7 09:53 AM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476440544&ptid=27287870][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
記得幾個月前,有個帖子話懷疑NN係學術作假:lol
樓主有心去研究NN,值得讚賞,不過有幾點是錯了:
1. 樓主想講的是"準確率",不是"效率"。效率是另一個Topic
2. 最basic的NN其實不怎樣高,真正高"準確率 ... [/quote]
或者我應該用高效能一詞,而不是高效率。
我的意思是,投入一定資源,如 memory 、 CPU 等硬件,可以換取什麼運算結果。
而衡量運算結果的優劣,可能是準確度,可能是運算時間,可能是其他。
而我前面所指的基本上是準確度,但亦同時是指整體顧及各方面後來看。
雖然現在我對 neural network 的高效能表現相對以前是比較信服。
但同時,以前質疑 neural network 的論點現在看來還是正確啊!
即是現在的新看法,是理解 neural network 的運作比起一般 AI 方法一般而言,可能較好。
但 neural network 並不是萬能 AI 方法。
萬能的 AI 方法,以前已討論過,是不存在的。
換言之,對於任一個可用有限資源的 neural network 來解決的問題而言,理論上準確度不可能無止境的上升。
可能你沒有留意, 3 樓提及的 ConvNetJS 正是 CNN 。
我說到的近 input 的 layer 亂估或 random ,是指 training 時,每層 layer 可以看成的實際的 assumption 。
當然 training 不斷進行時,這樣的情況就慢慢轉變,每層 layer 都變成輸出較有用、準確的 output 。
順便說清楚一些,我指 2 或多份 neural network “亂估”,可以是指單一層 layer 分成多份獨立 neural network ,然後下一層用不同的 weight 組合,變成該一層的運算。
即是我指的兩份或多份 neural network “亂估”是橫向分開,而多層 layer ,是縱向的結合。
MagpiesHK 2018-3-7 11:44
樓主繼續努力啦
Take個course如:
udacity的nano-degree或者係courser的deeplearning.ai
我只可以講,樓主的研究是有用同有關的,但係基礎不好,有些concept不明白,所以有些問題解唔通
點解 "deeplearning"咁高準確率,本來我可以彈一兩個links 就解答尼個問題
但係我又唔想破壞左大家既好奇心:lol (貼士: CNN 和 NN差了什麼)
另外,NN的淺layers和深layers分別做什麼?
darigold 2018-3-7 12:06
留名學習。
xianrenb 2018-3-7 12:38
[quote]原帖由 [i]MagpiesHK[/i] 於 2018-3-7 11:44 AM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476446806&ptid=27287870][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
樓主繼續努力啦
Take個course如:
udacity的nano-degree或者係courser的deeplearning.ai
我只可以講,樓主的研究是有用同有關的,但係基礎不好,有些concept不明白,所以有些問題解唔通
點解 "deeplearnin ... [/quote]
以我的理解, CNN 的核心概念是(多份 neural network 用) shared weights 。
換個角度來說,就是把 parameters 的數目下降,使 training 的效率提升。
其實按我以前質疑 neural network 的討論中引用過的新聞可知,連專家都不大能正確解釋為何 neural network 那樣高效。
什至該新聞中的專家提供的解釋是,雖然數學上說不通,但物理法則使 neural network 高效。
但是我們知道,好多應用問題,不是對應物理世界上的問題。
其實看回 neural network 用的 backpropagation 方法,應該是基於 gradient descent 。
只是 optimization 方法,不是找 root ,而是找 minimum 。
換言之,一早就 assume 不可能推 error rate 至 0 ,而是只能找 local minimum 。
就算前面所說的每層 neural network layer 能把多份 neural network 作最佳結合,正常情況下也是不能做到該層 error rate 為 0 。
有乜理由 d neural network 應用研究,下下都講到整體 error rate 非常接近 0 ?
換言之,我的看法是 neural network 可能相對現時其他 AI 方法做到較低 error rate 。
但 neural network 不會是一種萬能 AI 方法,次次都能推 error rate 至非常接近 0 值。
我會質疑 error rate 非常接近 0 值的任何 AI 方法。
Susan﹏汪汪 2018-3-7 13:08
好奇一問
如果AI算法裡面冇隨機參數的話
例如下圍棋、同一樣的training
正常來講電腦先手下第一步應該係相同
xianrenb 2018-3-7 13:47
[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2018-3-7 01:08 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476451141&ptid=27287870][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
好奇一問
如果AI算法裡面冇隨機參數的話
例如下圍棋、同一樣的training
正常來講電腦先手下第一步應該係相同 [/quote]
應該好似計 statistics 咁,用相同算法的機器會得出相同的結果。
看應用情況,有可能無 random 有好處,也可能有壞處。
而我自己覺得,如果 training 時無 random,應用時再考慮情況而決定加不加,會是一個更好方法。
但問題是,現時看來最好用的 AI 方法是 neural network ,而一般 training 方法看來都是用 random weights 開始。
MagpiesHK 2018-3-7 14:07
[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2018-3-7 01:08 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476451141&ptid=27287870][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
好奇一問
如果AI算法裡面冇隨機參數的話
例如下圍棋、同一樣的training
正常來講電腦先手下第一步應該係相同 [/quote]
結果每次training結果都會是一樣的。唔信既話,可以係run algorithm之前將所有random seed set 做 constant:loveliness:
我反問:點解要用random,除左initial weight之外,邊度會用random ?
Susan﹏汪汪 2018-3-7 14:17
[quote]原帖由 [i]MagpiesHK[/i] 於 2018-3-7 02:07 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=476454054&ptid=27287870][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
結果每次training結果都會是一樣的。唔信既話,可以係run algorithm之前將所有random seed set 做 constant:loveliness:
我反問:點解要用random,除左initial weight之外,邊度會用random ? [/quote]
汪汪以前寫過係random initial state
只不過係諗起
Google 派AI上戰場下圍棋的話
如果冇random的狀態下
AI的第一步棋其實係完全知道點走
MagpiesHK 2018-3-7 14:31
[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2018-3-7 02:17 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476454577&ptid=27287870][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
汪汪以前寫過係random initial state
只不過係諗起
Google 派AI上戰場下圍棋的話
如果冇random的狀態下
AI的第一步棋其實係完全知道點走 [/quote]
所以你其實己經答左自己既問題,無random,input又係一樣,output自然會係一樣
MagpiesHK 2018-3-7 14:36
人生無左random, 或者大家的起點都係一樣,結局會唔會都係一樣?
。。。扯遠了,不過真係同NN有關
講返initial weight既技術問題:random 主要係break symmetry,同避免跌落同一個local minimum.
除此之外,NN仲有幾個地方會用random. 大家有興趣就多多學習:loveliness:
rhwlam 2018-3-8 00:03
[quote]原帖由 [i]xianrenb[/i] 於 2018-3-5 12:34 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476330380&ptid=27287870][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
好像未見過有人解釋為何 artificial neural network 效率可以好高。
我想到一個看來合理的解釋如下。
正常一個 neural network 會有好多層 layer 。
如果將近 input 的 layers ,看成是多個 neural network , ... [/quote]
依小弟愚見, 感覺近年神經網絡能大行其道的原因也是有關硬件的進步:
1) 64-bit系統令小數計算的精準度大為提高, 所以神經網絡模型的誤差能降至能夠乎合眾多應用的要求.
2) 超級電腦伺服器的可怕計算力近年終於提高至能夠應付一個足夠複雜的神經網絡所必須的龐大(繁冗)計算量.
不知對不對...
MagpiesHK 2018-3-8 09:02
[quote]原帖由 [i]rhwlam[/i] 於 2018-3-8 12:03 AM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=476487803&ptid=27287870][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
依小弟愚見, 感覺近年神經網絡能大行其道的原因也是有關硬件的進步:
1) 64-bit系統令小數計算的精準度大為提高, 所以神經網絡模型的誤差能降至能夠乎合眾多應用的要求.
2) 超級電腦伺服器的可怕計算力近年終於提 ... [/quote]
其實大部分AI計算,都係利用幾千蚊你用黎打機既Graphic Card.
算法進步,大數據都係原因。最主要都係一代一代既AI人頂住左冷眼同寂寞,默默付出進步,終於開花結果
xianrenb 2018-3-8 13:56
[quote]原帖由 [i]xianrenb[/i] 於 2018-3-7 12:38 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476449561&ptid=27287870][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
以我的理解, CNN 的核心概念是(多份 neural network 用) shared weights 。
換個角度來說,就是把 parameters 的數目下降,使 training 的效率提升。
其實按我以前質疑 neural network 的討論中引用過的新 ...
新聞中的專家提供的解釋是,雖然數學上說不通,但物理法則使 neural network 高效。 ...[/quote]
或者現在估到前面說到的新聞中的專家所說的實際意思是什麼了。
他們指的應該是指 CNN 的應用情況。
而且是用於對應物理世界的應用,如 image recognition 、 speech recognition 等等。
我看 convolutional neural network(CNN) 中 convolutional layer 的確像 filter 在做 blurring 。
然後 (max) pooling layer 更加是像把 data tensor 自動判斷應 shift 某方向一定格數來處理。
換言之,相關的物理數據就算是位置對不正,在 CNN 中處理上可說是無大影響的。
於是這方面就比其他 AI 方法要優勝。
但這樣的解釋,只適合對應物理世界的應用。
更不是某些 neural network 研究準確度超高的合理解釋。
煙民母親生賤種
*** 作者被禁止或刪除 內容自動屏蔽 ***
xianrenb 2018-3-11 09:18
[quote]原帖由 [i]煙民母親生賤種[/i] 於 2018-3-11 06:34 AM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476652018&ptid=27287870][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
但亦有可能用呢 D 電腦!
:fst_012::fst_008::fst_012:
[url=http://news.discuss.com.hk/viewthread.php?tid=26743775]http://news.discuss.com.hk/viewthread.php?tid=26743775[/url] [/quote]
如果我無理解錯,現時的 neural network 設計,雖然說是 network ,但一般設計會是“對齊”好了的一層層 layer 。
backpropagation 是逐次兩層間的處理。
forward 做 prediction ,亦是逐次兩層間的計算。
所以,應該可以好容易把 neural network 分割成多台 server 來處理。
不過,如果同 layer 都分成多台 server 的話,資料傳輸量成倍數增長。
不論如何,這樣規模的 neural network 應該好誇張,應該有好多 weights/filter 要 tune 。
那麼,做 training 應該要好耐。
又或者,在有限時間內,能否 train 出一個可用的 neural network 呢?
賭爸 2018-3-11 22:02
:loveliness: :loveliness: :loveliness: Yes
煙民母親生賤種
*** 作者被禁止或刪除 內容自動屏蔽 ***
頁:
[1]