查看完整版本 : 神經網絡的一些基本算法及其效率的初步比較

rhwlam 2018-3-7 21:38

近來看到大家討論神經網絡的相關知識, 不禁回想自己很久以前修讀一門科目時自己所提出的一個term project. (現在隔了這麼久小弟大概忘記了不少當中知識...) 記得當時小弟是不靠任何插件、自己編程出神經網絡的模型和實行不同學習算法 (如decent法, backpropagation和Newton法等) 用作學習/模仿不同的"系統": 1) 線性多項式, 2) 非線性多項式, 3) 數字過濾函數, 和 4) 非線性動態公式. 小弟對於其不同學習方法應用在不同"系統"的學習速度作出了比較和分析.

以"非線性動態公式"的結果為例:
[attach]7990322[/attach]

[b][u]以下是小弟當時報告的結論:[/u][/b]
在這個項目中,筆者實施了Newton和quasi-Newton法來執行多層神經網絡的訓練。仿真實驗表明,基於牛頓的方法通常比梯度方法(如backprogration和decent算法)具有更好的收斂性。然而,由於局部最小值附近的病態(ill-conditioned)Hessian矩陣,Newton法對噪聲或數值誤差變得非常敏感,並且很難獲得穩定和準確的權重(weights)估計。為了解決這個問題,Newton方法被修改為混合Newton/damped-Newton方案。仿真表明,該方案可以有效地消除接近最小值的振盪。Quasi-Newton也是一個可選擇的選項,具有較少的計算負擔。為了獲得具有相對較快收斂速度的估計,筆者推薦使用Newton法或其他精煉搜索方向的方法(例如Levenberg-Marquardt和conjugate gradient算法)進行訓練。而且,收斂性也是實際執行的問題。在一些特定的問題中,特別是非線性系統的識別,所選擇的訓練算法可能只會收斂到一組有限的初始權值(weights)。因此,重新設置培訓過程的附加方案應與培訓本身結合在一起。筆者想強調的是,梯度法和Newton法都只是搜索局部最小值的方法。這意味著答案不能保證整個參數空間的最優點(global optimum)。此外,神經網絡應選擇最佳數量的神經元來達到理想的性能。(但是,作者沒有在這方面進行任何模擬。)使用過多的神經元可能導致對隨機噪聲的模型估計不當,因此會降低構建模型的魯棒性(robustness)。確定合理數量的隱藏感知器(hidden perceptrons)的訓練方案也是神經網絡訓練中的一個重要問題。


希望對大家有點參考價值...

xianrenb 2018-3-8 12:22

[quote]原帖由 [i]rhwlam[/i] 於 2018-3-7 09:38 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476479801&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
近來看到大家討論神經網絡的相關知識, 不禁回想自己很久以前修讀一門科目時自己所提出的一個term project. (現在隔了這麼久小弟大概忘記了不少當中知識...) 記得當時小弟是不靠任何插件、自己編程出神經網絡的模型和 ... [/quote]

我無正式學過,但算是看過一些相關資料:
[url=https://cs.stanford.edu/people/karpathy/convnetjs/docs.html]https://cs.stanford.edu/people/karpathy/convnetjs/docs.html[/url]
中的 Trainers
[url=https://cs.stanford.edu/people/karpathy/convnetjs/demo/trainers.html]https://cs.stanford.edu/people/karpathy/convnetjs/demo/trainers.html[/url]
後者是一比較多種算法的 demo 網頁。
大家可以直接 run 到算法,自行比較。

看來 Adadelta 算是一個萬用的方法。

assembly.jc 2018-3-8 17:38

Thanks rhwlam 兄, Newton method 用以下公式嗎?

w(n+1) = w(n) - H(-1) g

where
H(-1) : inverse of Hessian matrix of cost function
g : gradient of cost function

Newton method 也要 backpropage 吧?每個 neuron 都要計一次 Hessian 的 inverse? 找 matrix's inverse 應該相當費時? 用 LU decomposition 嗎?

rhwlam 2018-3-8 21:06

[quote]原帖由 [i]assembly.jc[/i] 於 2018-3-8 17:38 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476523754&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
Thanks rhwlam 兄, Newton method 用以下公式嗎?
w(n+1) = w(n) - H(-1) g
where
H(-1) : inverse of Hessian matrix of cost function
g : gradient of cost function
Newton method 也要 backpropag ... [/quote]
assembly.jc果然是專家. 佩服!
1. 小弟記得Newton方法最好不要用backpropagation的形式, 因為非常可能會不收歛; 所以利用Newton方法的神經網絡的所有weights要同時更新.
2. 是的, 小弟用Newton方法的公式也是: [i]w[/i]([i]n[/i]+1) = [i]w[/i]([i]n[/i]) - [i]H^([/i]-1) [i]G[/i]
3. 當然不要直接計算inverse matrix了. 多次的LU decomposition也很費時. 小弟以往用的是利用Broyden-Fletcher-Goldfarb-Shanno (BFGS)算法更新inverse Hessian, 那麼便不用多次地使用LU decomposition了.

不知我的理解是否正確, 但與閣下這般討論感覺很爽! :smile_o12:

xianrenb 2018-3-9 09:34

[quote]原帖由 [i]rhwlam[/i] 於 2018-3-8 09:06 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476532596&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]

assembly.jc果然是專家. 佩服!
1. 小弟記得Newton方法最好不要用backpropagation的形式, 因為非常可能會不收歛; 所以利用Newton方法的神經網絡的所有weights要同時更新.
2. 是的, 小弟用Newton方法的公式也是: w ... [/quote]

我估大概是指 Newton's method in optimization 吧?
[url=https://en.wikipedia.org/wiki/Newton%27s_method_in_optimization]https://en.wikipedia.org/wiki/Newton%27s_method_in_optimization[/url]

或者以下表達可能更好,因為我看 H 及 g 次次都不同,第 n 次 iteration 有其值。
w_(n+1) = w_n - H_n^(-1) * g_n

那麼是否 H_n_(i,j) = x_i * x_j ?
H_n_(i,j) 指 H_n 第 i row , j column 的 element 。
x_i 指第 i 個 input 。

另外,約略看過 [url=https://en.wikipedia.org/wiki/Broyden%E2%80%93Fletcher%E2%80%93Goldfarb%E2%80%93Shanno_algorithm]https://en.wikipedia.org/wiki/Broyden%E2%80%93Fletcher%E2%80%93Goldfarb%E2%80%93Shanno_algorithm[/url]

我看在一般 optimization problem 中是可行。
但在 neural network 中,每次 traning iteration d parameter 基本上都不同位置。
一次 iteration 應該用不到上一次 iteration 的資料來作加速算法。
不知這個看法對不對。

另外,這些方法是否適合 neural network ?
因為近 input layer 的 neuron 的 output ,應該會同時用於下一層 layer 的多個 input 。
如果用這些算法來估算 input 應如何變化,那其實是怎樣結合變化的結果來得出前一層 layer 的 output 變化呢?

[[i] 本帖最後由 xianrenb 於 2018-3-9 12:51 PM 編輯 [/i]]

assembly.jc 2018-3-10 20:24

[quote]原帖由 [i]rhwlam[/i] 於 2018-3-8 09:06 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476532596&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]

assembly.jc果然是專家. 佩服!
1. 小弟記得Newton方法最好不要用backpropagation的形式, 因為非常可能會不收歛; 所以利用Newton方法的神經網絡的所有weights要同時更新.
2. 是的, 小弟用Newton方法的公式也是: w ... [/quote]

小弟不是專家,只學過點皮毛而已。言歸正傳,rhwlam 兄用的方法是否和 B. Robitaille 文中 (page 6) ([url=https://www.witpress.com/elibrary/wit-transactions-on-information-and-communication-technologies/2/12832]https://www.witpress.com/elibrary/wit-transactions-on-information-and-communication-technologies/2/12832[/url] 免費的) 提及的類似? 就 backpropagation 而言,以前的定義好像和現在不同,參考 MIT (page 200)([url=http://www.deeplearningbook.org/contents/mlp.html]http://www.deeplearningbook.org/contents/mlp.html[/url]),backpropagation 指計算 gradient 的方法。即 B. Robitaille 文中 Steepest descent,而 B. Robitaille 文中的 backpropagation,則類似現在的 backpropagation + regularization ( [url=http://neuralnetworksanddeeplearning.com/chap3.html]http://neuralnetworksanddeeplearning.com/chap3.html[/url] Overfitting and regularization section)。小弟之前說 backpropagation 是 MIT 定義的意思。如你的 Newton 方法是用前帖提及的公式,也需先計 gradient,其實也算是 backpropagation 之一種。

不知道原來有 (BFGS) 這麼方便的算法,算法是和 #3 wiki ([url=https://en.wikipedia.org/wiki/Broyden%E2%80%93Fletcher%E2%80%93Goldfarb%E2%80%93Shanno_algorithm]https://en.wikipedia.org/wiki/Broyden%E2%80%93Fletcher%E2%80%93Goldfarb%E2%80%93Shanno_algorithm[/url])所說的一樣嗎?  如是,其中第二步是否解
h'(x) = 0  ([url=https://en.wikipedia.org/wiki/Line_search]https://en.wikipedia.org/wiki/Line_search[/url])
就可以?

assembly.jc 2018-3-10 20:32

[quote]原帖由 [i]xianrenb[/i] 於 2018-3-9 09:34 AM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476551567&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]


那麼是否 H_n_(i,j) = x_i * x_j ?
H_n_(i,j) 指 H_n 第 i row , j column 的 element 。
x_i 指第 i 個 input 。
... [/quote]

不是,H 是 cost function 的 second derivative,wiki 有定義 [url=https://en.wikipedia.org/wiki/Hessian_matrix]https://en.wikipedia.org/wiki/Hessian_matrix[/url],
w(n+1) = w(n) - H(n)^-1 * g(n)
表示 w(n) 減去 cost function 的 second derivative 的 inverse * cost function 的 first derivative (即 gradient)

[[i] 本帖最後由 assembly.jc 於 2018-3-10 08:34 PM 編輯 [/i]]

xianrenb 2018-3-10 20:50

[quote]原帖由 [i]assembly.jc[/i] 於 2018-3-10 08:32 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476633159&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]


不是,H 是 cost function 的 second derivative,wiki 有定義 [url=https://en.wikipedia.org/wiki/Hessian_matrix]https://en.wikipedia.org/wiki/Hessian_matrix[/url],
w(n+1) = w(n) - H(n)^-1 * g(n)
表示 w(n) 減去 cost function 的 second derivative 的 inve ... [/quote]

如果不考慮 activation function 那一部份,而 cost function C 是 1/2*(t - y)^2 。
C = 1/2 (t^2 - 2*t*y + y^2)

y = Σ w_i * x_i
y^2 = Σ w_i * w_j * x_i * x_j

那麼 partial derivative 兩次,不是 x_i * x_j ?

又或者,正確應該點計?

p.s.
前面 y^2 錯了,看來應是:
y^2 = (Σ_(i = j) w_i^2 * x_i^2) + (Σ_(i /= j) 2 * w_i * w_j * x_i * x_j)

[[i] 本帖最後由 xianrenb 於 2018-3-10 09:25 PM 編輯 [/i]]

xianrenb 2018-3-11 08:59

[quote]原帖由 [i]xianrenb[/i] 於 2018-3-10 08:50 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476633973&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]


如果不考慮 activation function 那一部份,而 cost function C 是 1/2*(t - y)^2 。
C = 1/2 (t^2 - 2*t*y + y^2)

y = Σ w_i * x_i
y^2 = Σ w_i * w_j * x_i * x_j

那麼 partial derivative 兩次,不 ... [/quote]

還是算錯了。
或者應該是:
y^2 = (Σ_(i = j) w_i^2 * x_i^2) + (Σ_(i < j) 2 * w_i * w_j * x_i * x_j)
y^2 = (Σ_(i = j) w_i^2 * x_i^2) + (Σ_(i /= j) w_i * w_j * x_i * x_j)

所以 ∂^2 C/ ∂w_i^2 = x_i^2
但 ∂^2 C/ (∂w_i ∂w_j) = 1/2 * x_i * x_j

即是:
H_n_(i,j) = x_i^2 when i = j
H_n_(i,j) = 1/2 * x_i * x_j when i <> j

不知還有沒有錯。

xianrenb 2018-3-11 11:07

前面我質疑過 Newton's method in optimization 是否適用於 neural network 。
因為我覺得這個方法,其實是找 cost function gradient 的 root 。

如果一層 output layer 有兩個 neuron 。
兩個 cost function gradient 分別是 g1 及 g2 。
而兩個 neuron 都 share 前一層的 output 作 input x 。
那麼, g1(x) = 0 的 root 可以是 x = k1 。
g2(x) = 0 的 root 可以是 x = k2 。
其中一個可能情況,是 k1 = 1 , k2= -2 。
如果結合方法是直接取 mean,Δx 的結果就會是使 x 走向 (k1 + k2)/2 = -1/2。
然而,這個位置還會否使 g1 及 g2 比較接近 0 呢?
我看不一定,例如可以是 x 越小 g1 值越大,同時 x 越大 g2 值越小。
如果本來 g1>0 (at x = k1) 且 g2<0 (at x = k2)的話,就不能使 g1 及 g2 走向 0 。

對比來說 gradient descent 就應該可靠得多。
如果都如上面描述般有 g1 及 g2 。
gradient descent 計算出 Δx1 = k3 可以預算降低 cost c3。
Δx2 = k4 可以預算降低 cost c4。
如果 k3 = 1 , k4 = -2
合起來 Δx = Δx1 + Δx2 = 1 - 2 = -1
按理第一個 output cost 無下降,反而上升。
但第二個 output cost 會下降。
Δcost 應該會是 -c3*(-1)/1 - c4 *(-1)/(-2) = c3 - 1/2 * c4

但平均來說, c3/abs(k3) = c4/abs(k4)
即是 c4 = 2 * c3
即是 Δcost = c3 - 1/2 * (2 * c3) = 0
而若果 c3/abs(k3) < c4/abs(k4)
則 c4 > 2 * c3
-1/2 * c4 < -c3
c3 - 1/2 * c4 < 0
Δcost < 0
但這個假設即是等於 abs(g2) > abs(g1) 。
而這樣才會使 abs(k4) > abs(k3) 。
所以就是合理的變化。
如果 gradient 好斜,只要改少少 x 就可以好接近 minimum 。
cost 會大幅下降。

不知上面的說法對不對?

[[i] 本帖最後由 xianrenb 於 2018-3-11 11:36 AM 編輯 [/i]]

rhwlam 2018-3-11 12:10

[quote]原帖由 [i]assembly.jc[/i] 於 2018-3-10 20:24 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476632763&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
而 B. Robitaille 文中的 backpropagation,則類似現在的 backpropagation + regularization ( [url=http://neuralnetworksanddeeplearning.com/chap3.html]http://neuralnetworksanddeeplearning.com/chap3.html[/url] Overfitting and regularization section)。[/quote]
小弟沒有應用過information entropy/cross-entropy的任何概念, 所以應該與"http://neuralnetworksanddeeplearning.com/chap3.html#the_cross-entropy_cost_function"所述的不同.

[quote]原帖由 [i]assembly.jc[/i] 於 2018-3-10 20:24 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476632763&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
不知道原來有 (BFGS) 這麼方便的算法,算法是和 #3 wiki ([url=https://en.wikipedia.org/wiki/Broyden%E2%80%93Fletcher%E2%80%93Goldfarb%E2%80%93Shanno_algorithm]https://en.wikipedia.org/wiki/Broyden%E2%80%93Fletcher%E2%80%93Goldfarb%E2%80%93Shanno_algorithm[/url])所說的一樣嗎?  [/quote]
我直接把公式貼出來好了:
[attach]8003603[/attach]
我沒有細仔註明. 希望assembly.jc兄也能看得明白, 當中的theta是weights組成的向量, 而detla代表的是變化向量. [i]H[/i]^(-1)的開始值可以如閣下提出的LU decomposition求出. 因為只用算一次, 所以不用太講究.

另外, 小弟運用的是很久以前的方法了, 可能會不合時宜. 例如, 小弟剛查了一下, 發覺現在已經有算法將BFGS以backpropagation的形式運用了.

[[i] 本帖最後由 rhwlam 於 2018-3-11 12:15 PM 編輯 [/i]]

assembly.jc 2018-3-11 13:30

[quote]原帖由 [i]xianrenb[/i] 於 2018-3-10 08:50 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476633973&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]


如果不考慮 activation function 那一部份,而 cost function C 是 1/2*(t - y)^2 。
C = 1/2 (t^2 - 2*t*y + y^2)

y = Σ w_i * x_i
y^2 = Σ w_i * w_j * x_i * x_j

那麼 partial derivative 兩次,不 ... [/quote]
要考慮 activation function 的。運算過程可看看 haykin ([url=https://www.amazon.com/Neural-Networks-Learning-Machines-3rd/dp/0131471392]https://www.amazon.com/Neural-Networks-Learning-Machines-3rd/dp/0131471392[/url]) chapter 4。

xianrenb 2018-3-11 13:47

我明白了,我把兩個 concept 混淆了。

backpropagation 只是計算 gradient 的方法。
stochastic gradient descent algorithm 則是最簡單的利用 gradient 來做 optimization 的方法。
只要把 gradient 乘一個 factor 就可以用來 update weights 。

但是還有其他方法可以做 optimization 。
其他 optimization 方法,每次應該是基於已合併 backpropagation 計算效果的單一個 gradient 數值上。
而不是逐個 neuron 分開計算結果再合併效果推至近 input layer 。
所以其他 optimization 方法一樣可以正常運作。

不過如此說來。
基本上可以肯定其他 optimization 方法用於 neural network training 上,都不會比 stochastic gradient descent 或類似方法更有效率。
因為其他 optimization 方法計完 gradient ,再要作更多的運算。

assembly.jc 2018-3-11 16:27

[quote]原帖由 [i]rhwlam[/i] 於 2018-3-11 12:10 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476661187&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
小弟沒有應用過information entropy/cross-entropy的任何概念, 所以應該與"http://neuralnetworksanddeeplearning.com/chap3.html#the_cross-entropy_cost_function"所述的不同.
[/quote]
條 link 內容可能有點誤導,regularization 可應用到任何 cost functions,不一定是 cross-entropy。

之前貼 link 有點亂,簡單說明一下。之前看到#1 帖,不明白為何 decent (是 steepest descent吧?) 和 backpropagation 要分開,以小弟的認知,steepest descent 也是利用 backpropagation 其中一種方式。此話怎說? 先看 steepest descent 的公式

假設 g(n) = gradient of cost function, η = learning rate (constant)
steepest descent/gradient descent:
w(n+1) = w(n) - ηg(n)

要計 w(n+1),要先計 g(n),即 gradient,要計 gradient,先從 output layer 計起,而 backprop 巧妙的地方是 hidden layers 的  gradients 可利用 output layer 的計算結果而無需重覆計算。feedforward 是由  input layer 到 hidden layer 到 output layer,backprop 反其道而行,由  output layer 到 hidden layer,故稱 backpropagation。MIT 定義 backprop 是計算 gradient 的方法,正確來說是一種快速計算 gradient 的方法。

再看 #6 B. Robitaille 文中 (page 6)  backpropagation 的公式:
w(n+1) = w(n) - ηg(n) + λw(n-1)
明顯和現在的定義不同。反而和現在的 regularization 形式相似。
regularization 公式: λ = parameter (can be any constant, need to be tuned in practical ),
w(n+1) = w(n) - ηg(n) - λw(n)

所以,大家對 backprop 的理解可能不同。而之前小弟問 Newton method 有否利用 backprop,其實想知 cost function 的 second derivative 有否如計 gradient 這樣的計算捷徑,但原來有 BFGS 算法,根本無需去計 second derivative,間接答了我的問題。

Thanks rhwlam 兄提供公式,此式和 wiki 提供的一致,theta 由 gradient 推算出來。再看公式,BFGS 只用到 gardient 的值,而 gradient 用 backprop 或是 analyst 或是其他的方式求出,似乎對計算 H 沒有影響,也對收歛性沒有影響。backprop 是計算 gradient 快速方法,故 BFGS 運用 backprop 其實再自然不過吧。

assembly.jc 2018-3-11 16:48

[quote]原帖由 [i]xianrenb[/i] 於 2018-3-11 01:47 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476665713&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
我明白了,我把兩個 concept 混淆了。

backpropagation 只是計算 gradient 的方法。
stochastic gradient descent algorithm 則是最簡單的利用 gradient 來做 optimization 的方法。
只要把 gradient 乘一個 fa ... [/quote]
對的。但計算上最有效率 (因公式最簡單),未必是收歛最快的方法 (即最快到達 local/global minima),睇返樓主#1 的 report,newton/damped-Newton 收歛最快。但現在的 network 規模大過以前好多,newton method 的計算成本可能幾何級數上升,所以 gradient descent 還是大行其道。但這些都不是重點了,睇返 MIT part 3,研究方向轉左去其他地方了。

kcchan006 2018-3-11 22:48

你們真是好專業, 香港比小討論 machine learning algorithms.
我都是剛看coursea Andrew Ng 的machine learning course.

我想請教各位如何set neural network bias and weight value.

assembly.jc 2018-3-12 13:00

[quote]原帖由 [i]kcchan006[/i] 於 2018-3-11 10:48 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=476692248&ptid=27293700][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
你們真是好專業, 香港比小討論 machine learning algorithms.
我都是剛看coursea Andrew Ng 的machine learning course.

我想請教各位如何set neural network bias and weight value. [/quote]

是指set Initial weight and bias?

kcchan006 2018-3-12 19:16

是, 請問用什麼準則來設定Initial weight and bias?

xianrenb 2018-3-13 12:38

[quote]原帖由 [i]kcchan006[/i] 於 2018-3-12 07:16 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476736992&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
是, 請問用什麼準則來設定Initial weight and bias? [/quote]

剛巧看 [url=https://github.com/denizyuret/Knet.jl]https://github.com/denizyuret/Knet.jl[/url] ,知道 Knet 有 xavier()
[url=http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.xavier]http://denizyuret.github.io/Knet.jl/latest/reference.html#Knet.xavier[/url]
提到相關 paper :
[url=http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf]http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf[/url]

assembly.jc 2018-3-13 14:09

[quote]原帖由 [i]kcchan006[/i] 於 2018-3-12 07:16 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476736992&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
是, 請問用什麼準則來設定Initial weight and bias? [/quote]

可以先試一下用以下的 NN 解 XOR 問題:
2 input -> 1 hidden (2 neurons) -> 1 output layer (1 neuron)
activation function: sigmond,
cost function: Mean square error
epochs: 2000

如果 set initial weight = 0, bias = 0,trains 完 2000 epochs,你會發覺 input (1, 1) 會得到錯誤的答案 (即 return 1) 。如果隨機去 set initial weight and bias,每次 trains 2000 epochs,會發現,有時會正確,有時會錯。這就是之前 ching 提過的 local minima 問題。

沒有一個放於四海皆準的準則,initial weight and bias 的值如何最有效率,按 NN 結構不同而改變,有些情況可以用數學方法分析,但一旦 NN 結構改變,又要再分析多一次,有時 NN 太複雜,根本分析唔到,所以大家用隨機方法去撞。

kcchan006 2018-3-14 00:00

謝謝你們, 我再研究下.
本人不是程式出身, 是工程出身, 但對 machine learning 演算法有興趣, 所以學下去, 可能比較困難. 可否在數學方面和理論著手重多些?
請問有什麼課程可可以了解到多些(網上或網下)?
是否在一些 master degree 會比較多AI 科目學習? 
Eg. ployu Applied Mathematics or computer science master
都有些 AI  科目.

煙民母親生賤種

*** 作者被禁止或刪除 內容自動屏蔽 ***

assembly.jc 2018-3-14 14:17

[quote]原帖由 [i]kcchan006[/i] 於 2018-3-14 12:00 AM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476807435&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
謝謝你們, 我再研究下.
本人不是程式出身, 是工程出身, 但對 machine learning 演算法有興趣, 所以學下去, 可能比較困難. 可否在數學方面和理論著手重多些?
請問有什麼課程可可以了解到多些(網上或網下)?
是否在一 ... [/quote]

基本  machine learning 論理,Shai Shalev-Shwartz 的書比較有系統:
[url=https://www.amazon.com/Understanding-Machine-Learning-Theory-Algorithms/dp/1107057132]https://www.amazon.com/Understanding-Machine-Learning-Theory-Algorithms/dp/1107057132[/url]

classical NN 可看下:
[url=http://hagan.okstate.edu/nnd.html]http://hagan.okstate.edu/nnd.html[/url] (免費的)
偏重數學推論,都是 Haykin 比較全面,但書中不少錯處,先看下 errata 較好:
[url=https://www.amazon.com/Neural-Networks-Learning-Machines-3rd/dp/0131471392]https://www.amazon.com/Neural-Networks-Learning-Machines-3rd/dp/0131471392[/url]
[url=https://www.cise.ufl.edu/~jnw/Haykin3eErrata.shtml]https://www.cise.ufl.edu/~jnw/Haykin3eErrata.shtml[/url]

之前貼過些 deep learning 學習資料:
[url=http://computer.discuss.com.hk/viewthread.php?tid=27270411]http://computer.discuss.com.hk/viewthread.php?tid=27270411[/url]

最後提 2 點,1. machine learning 依賴 advanced calculus, linear algebra, probability and statistics 知識,其 linear algebra, probability and statistics 是 applied maths 的範圍,由 applied maths 引申到 machine learning 似乎又合理,但課程可以學到多少 machine learning 的知識,樓主要自己看清楚。
2. machine learning 只是 AI 其中一個部份,AI 課程未必以 machine learning 為重點或中心展開,這些報讀前要了解清楚。

rhwlam 2018-3-14 16:58

[quote]原帖由 [i]煙民母親生賤種[/i] 於 2018-3-14 03:06 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476811878&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
做工程發到唔清唔楚, 仲洗鬼學呢 D 乜野 AI / ML  ... 老哥你幾多層樓渣手??:fst_011: [/quote]
:smile_o16:...

[[i] 本帖最後由 rhwlam 於 2018-3-14 05:07 PM 編輯 [/i]]

rhwlam 2018-3-14 17:06

[quote]原帖由 [i]kcchan006[/i] 於 2018-3-14 00:00 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476807435&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
謝謝你們, 我再研究下.
本人不是程式出身, 是工程出身, 但對 machine learning 演算法有興趣, 所以學下去, 可能比較困難. 可否在數學方面和理論著手重多些?
請問有什麼課程可可以了解到多些(網上或網下)?
是否在一 ... [/quote]
小弟沒這麼幸福, 可以在大學修科目... :smile_o03:
有時小弟會網上看一些online courses, 例如 mit open courseware (小弟特別喜歡這些教程, 因為很多是真的課堂錄影. 講解得仔細和過慢, 小弟才可以勉強跟得上). 如果是人工智能的入門科目, 小弟特別為閣下找了: [url]https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-034-artificial-intelligence-fall-2010/.[/url] 小弟試看了lecture 12B的影片, 這科目應該是十分好的教程.
共勉之!

kcchan006 2018-3-15 00:37

本人都是 正在看 coursera.org Andrew Ng 的machine learning。我都學得好慢。

stupidsing 2018-3-16 21:21

師兄用咩方法黎做 line search?
個 strong wolfe 好似幾複雜,抄左 algo 寫代碼都好似唔多work 咁。

參考了 numerical optimization 一書

assembly.jc 2018-3-19 18:40

[quote]原帖由 [i]stupidsing[/i] 於 2018-3-16 09:21 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476967232&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
師兄用咩方法黎做 line search?
個 strong wolfe 好似幾複雜,抄左 algo 寫代碼都好似唔多work 咁。

參考了 numerical optimization 一書 [/quote]

stupidsing 兄有沒有試過 exactly minimize h,即 solve h'(x) = 0 in step (4) (Example Use section)。
[url=https://en.wikipedia.org/wiki/Line_search]https://en.wikipedia.org/wiki/Line_search[/url]

rhwlam 2018-3-20 10:37

[quote]原帖由 [i]stupidsing[/i] 於 2018-3-16 21:21 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=476967232&ptid=27293700][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
師兄用咩方法黎做 line search?
個 strong wolfe 好似幾複雜,抄左 algo 寫代碼都好似唔多work 咁。
參考了 numerical optimization 一書 [/quote]
請問甚麼是"algo"?

stupidsing 2018-3-25 06:57

algorithm... 抄左 pseudocode :smile_35:
頁: [1]
查看完整版本: 神經網絡的一些基本算法及其效率的初步比較