# Maching Learning ## activation function $\phi^{(l)}_{j}$ ### $\phi_{j}^{(L)}$:最後一層的函數,通常和目的有關,如: + regression : $\phi^{(L)}(s) = s$ + binary classification : logistic + multicalss : softmax (HW3) ### Backprop + $\nabla_{ij}^{(l)} = \delta_{j}^{(l)} x_{i}^{(l-1)}$ + $\delta_{j}^{(l)} = \frac{\partial e}{\partial s_{j}^{(l)}} \\ = \sum_{k}\delta_{k}^{(l+1)}w_{jk}^{(l+1)}\phi'(s_{j}^{(l)}) \\ = \sum_{k}(\sum_{m}\delta_{m}^{(l+2)}w_{km}^{(l+2)}\phi'(s_{k}^{(l)})) \delta_{k}^{(l+1)}w_{jk}^{(l+1)}\phi'(s_{j}^{(l)}) \\ \vdots$ + 觀察其中 $\phi'$ 的部分 (tanh):   總是介於0~1之間,因此當: 1.$w$太小 2.層數太多,有太多的tanh'相乘 結果會傳回一個很小的數,導致neuron的影響太小(gradient diminishing) ### $\phi$的選擇條件: + monotonic + differentiabal + universal approximation (可以用線性組合逼近任意函數) ### 線性整流函數(Rectified Linear Unit, ReLU): + $f(x)=\max(0,x)$  + 雖然在$x=0$是不可微的,但可以像以前定義sign(0)的時候一樣把它視作特殊點設為1或0。 + 雖然當$x<0$時仍然會讓neuron是死的,但通常仍會有部分的neuron可以產生影響 + sparse repesetation : 接續上一點,因為這些死的nureon輸出是0,因此可以得到sparse的結果,能夠加速運算 + ReLU本身的函數簡單,沒有複雜的運算(相較於tanh, e...),因此計算快速 + 綜上所述,ReLU可以快速計算,因此是現在除了tanh之外最常用的函數 ## Deep Learning 中的 optimization + 一般的數值解的optimization(Newton...)在 deep learning 中不太實用,因為參數太多,會導致矩陣太大,因此會使用類似於 gradient decent 這樣一步一步前進的方法,但一樣要面對選擇 learning rate 的問題。 + 目標:在有限時間內學到‘夠好’的結果 + 在 deep learning 中,經常會出現不同權重的影響力差異很大的狀況(例如$w_{1}$只要稍微變動就影響結果很大,而$w_{2}$的變動卻不怎麼影響結果,畫成等高線後會呈現出一個橢圓形的形狀) + 在以前的 gradient decent 中,對於每個維度都會乘上相同的 learning rate($\eta$),但有沒有可能讓每個維度乘上不同的learning rate呢?(對gradient大的分量乘上比較小的learning rate,反之,避免在陡的地方走太大步或在平緩的分量走太小步) ### Gradient decent with momentum + 原本的GD : $w_{t}=w_{t-1} - \eta\nabla_{t}$ + 現在將$\nabla_{t}$改成$m_{t} = avg(\nabla_{1}, \nabla_{2}, \dots, \nabla_{t})$,可以視為一種denoising + 新的版本如下: $w_{t}=w_{t-1} - \eta m_{t}$ $m_{t} = \beta*m_{t-1} + (1-\beta)*\nabla_{t}$ + 將$m_{t}$展開後可以觀察到越多輪之前的$m$前面繪成上越多的$\beta$,可以想成是給比較新的$\nabla$較大的權重,而比較舊的$\nabla$權重會越來越小(exponential averaging) + SGD + momentum 是目前機器學習中常用的方法(這裡的SGD是small batch 的版本,避免只取一個data的不準確和使用所有data的時間消耗) ### rprop + $w_{t} = w_{t-1} - \vec{\eta}_{t}\cdot\nabla_{t}$ + locally : - small gradient component $\Leftrightarrow$ flat $\Leftrightarrow$ bigger step - big gradient component $\Leftrightarrow$ steep $\Leftrightarrow$ smaller step + $\vec{\eta}_{t} = \frac{\eta}{|\nabla_{t}|}$ $\Rightarrow -\vec{\eta}_{t}\cdot\nabla_{t}=-\eta * \mathrm{sign}(\nabla_{t})$ (componentwise的運算,結果仍是個向量) ### learning rate schedule + 但是原本的 gradient decent 卻剛好相反(小的走小步,大的走大步),其實是因為原本的 gradient decent 可以看成是 globally 的解。 + 為了要使結果是 converge 的,通常會讓$\eta$越來越小(learngin rate schedule),但是要注意縮小的幅度要適中,才不會太慢或太快。 ### RMSprop + 由於learning rate schedule 直接取值不易,因此發展出了 RMSprop + 將$|\nabla_{t}|$換成$\sqrt{u_{t}+\epsilon}$,其中 $u_{t}=\beta*u_{t-1} + (1-\beta)\nabla_{t}\cdot\nabla_{t}$,而$\epsilon$則是為了避免分母為零。 + 因此更新方式就是 $w_{t} = w_{t-1} - \frac{\eta}{\sqrt{u_{t} + \epsilon}}\nabla_{t}$ + 梯度小的時候,會乘上比較大的數,反之。 ### Adam(目前最常使用的方法) + 結合了 momentum 和 RMSprop 的方法 + $m_{t} = \beta_{1}m_{t-1} + (1-\beta_{1})\nabla_{t}$ $u_{t} = \beta_{2}u_{t-1} + (1-\beta_{2})\nabla_{t}\cdot\nabla_{t}$ + 由於直接做的話最一開始的零向量會導致結果有偏移,因此再令: $\hat{m}_{t} = \frac{m_{t}}{1-\beta_{1}}$, $\hat{u}_{t} = \frac{u_{t}}{1-\beta_{2}}$ + 則最後的更新方式就是: $w_{t} = w_{t-1} - \eta\frac{\hat{m}_{t}}{\sqrt{\hat{u}_{t}} + \epsilon}$ + 雖然Adam可以做快速的最佳化,但仍然要小心overfitting的問題。 ### 挑選$w_{0}$ + trained by ither people,由於計算成本大,因此若能取得別人訓練過的結果,可以令其為$w_{0}$再開始自己的training + 若是要自己從頭算,記得和 activate function 有很大的關係 + tanh : 全部為零、常數、長度太大的$w$ 是不好的,因此可以選用randomly, small 的$w_{0}$。 Randomlly : [-1, 1] Uniform, 0-mean Gaussuan Small : 要求 $\mathrm{var}(w) = \frac{1}{d^{(l-1)}}$ 或 $\frac{2}{d^{(l-1)}\ + d^{(l)}}$ (Xavier initialization)(隨機求出一組數後再做scaling使其符合條件)。 + ReLU : 只有 initialization 的部分和tanh不同,要求$\mathrm{var}(w) = \frac{2}{d^{(l-1)}}$ (He initialization) ## Deep Learning 中的 Regularization + 目前為止學過的方法 - L2, L1 (可以但不好用,通常是用在特殊狀況,比如發現在某一層的$w$突然很大需要限制其大小) - large-margin (同上) - aggregation (uniform O) - early stopping (O) ### Dropout + 今天可能出現某幾個neuron有特別極端的行為,導致附近的neuron為了維持結果而有相反的行為,久而久之兩者就會越來越極端,因此我們想要把那些一直犯錯的點去掉。 + dropout不只能用於解決上面情形,也可以避免NN太過肥大。 + 方法:每一輪training時丟掉隨機丟掉一定比例的節點再開始做。如果丟的是“壞”的節點,可以直觀地說結果會變好;如果丟掉的是“好”的節點,則相當於要求那些“壞”的節點自立自強改善其表現。 + 也可以解釋成:每次選一個“子網路”以及一部份的資料(mini-batch)來做訓練,最後將結果合在一起$\Rightarrow$aggregation$\Rightarrow$regularization + 也可以看作是在optimixation的過程中加上一些noise來達成regularization的效果。 ## end
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up