# 理論學習筆記(YouZhe) --- ## 符號定義 $input : {\bf x} \subseteq X$ $output : y \subseteq Y$ $X$生成$Y$ : $X \rightarrow Y$ target function : $f : X \rightarrow Y(ideal, unknow)$ data : $D = \{ ({\bf x_1},y_1),({\bf x_2},y_2)...({\bf x_N},y_N) \}$ hypothesis : $h:X \rightarrow Y$ hypothesis set : $H = (h_1,h_2,h_3...)$ best hypothesis(練出的最佳模型) : $g:X \rightarrow Y (learned \ to \ be \ used), g \subseteq H$ algorithm : $A$ --- ## 機器學習流程 $A$ take $D$ and $H$ to get $g$ ![](https://i.imgur.com/wBSibyL.png) https://www.youtube.com/watch?v=nQvpFSMPhr0&list=PLXVfgk9fNX2I7tB6oIINGBmW50rrmFTqf&index=1 ### 找出$h$函數 $define {\bf x} = (x_1,x_2,x_3...x_d)$ appprove if : $\sum_{i=1}^{d}w_i*x_i>threshold(臨界線)$ deny if : $\sum_{i=1}^{d}w_i*x_i<threshold(臨界線)$ $Y:{1,-1,0(ingnore)}$ sign : 判斷正負 負 -> -1, 正 -> 1 $y = h({\bf x}) = sign( (\sum_{i=1}^{d} x_i*w_i)-threshold )$ $h(x)$推演 $\begin{split} h({\bf x}) &= sign( (\sum_{i=1}^{d} x_i*w_i) - threshold ) \\ &= sign( (\sum_{i=1}^{d} x_i*w_i) + (-threshold)*(+1) ) \ \ 設(-threshold)為w_0 (threshold視作學習出來),(+1)為x_0 \\ &= sign(\sum_{i=0}^{d} x_i*w_i) \ \ 把它當成0向量\\ &= sign({\bf x}*{\bf w^T}) \ \ (當成向量來看) W^T可以看做線的的各個係數(也就是線的法向量) (T是矩陣符號,表矩陣翻轉,也就是ij變ji)\end{split}$ 備註: T的部分是後來補充,因此之後算式的T部分可能出錯 ![](https://i.imgur.com/GZASOyG.png) 補充:上文的0向量定義為始點、終點皆為同一點,無方向。因各個零向量皆同,故在圖上忽略之 二維下的狀況 ![](https://i.imgur.com/XNujiXM.png) $w$可以當成是線的係數(法向量) 點就是${\bf x}$ 圈叉就是$y$ 線就是$h$ 剖分出正負兩邊(線性分類系統) ## 二元分類 ### PLA(Perceptron Learning Algorithm)感知器演算法找出$g$ 當$g$在現有狀況下最接近$f$時 在$D$中 $g(x) = f(x) = Y$ 從$g_0$開始修改$w$,使其更接近$f$ 當我們在$w^T_t$發現$({\bf x_i},y_i)點錯誤$ 意思為 : $sign(w^T_t*{\bf x_i}) \neq y_i$ 是y的值修改 $y$ = +1時,表示$w$向量與$x$向量角度過大,因此與$yx$向量相加 $y$ = -1時,表示$w$向量與$x$向量角度過小,因此與$yx$向量相加 歸納出 $w_{t+1} \leftarrow w_t+y_i{\bf x_i}$ ![](https://i.imgur.com/DM6Wj8v.png) $y=+1$的情況 ![](https://i.imgur.com/Dig9yAI.png) $y=-1$的情況 ![](https://i.imgur.com/mIrfmZb.png) 不斷進行修正直到沒有錯誤為止 問題:可能沒有無錯誤的$h$ ### 在線性可分情況下的證明 當點可以用**一條線**完全分割成true&flase兩邊,我們稱其為線性可分(linear separable) ![](https://i.imgur.com/h08yg0A.png) <pre> 線性可分 不可分 不可分</pre> 線性可分表示: $y_n = sign(w^T_f*{\bf x_n})存在$ (此處底線n代表所有) 數學上的表示為:$y_t*w^T_f*{\bf x_t} \ge min(y_n*w^T_f*{\bf x_n})>0$ by updating $(x_i,y_i)$ $\begin{split}w^T_f*w^T_{t+1} &= w^T_f*(w^T_t+y_ix_i) \\ &= w^T_f*w^T_t+w^T_f*y_ix_i)\\ &> w^T_f*w^T_t+0\end{split}$ 向量越來越大,有兩種可能 : 1 角度越來越接近 2 向量長度越來越大 $w^T_t$ change when mistake $(x_i,y_i)$ $sign(w^T_t*x_i) \neq y_i \rightarrow y_iw^T_tx_i \le 0$ $\begin{split} \Vert w^T_{t+1} \Vert ^2 &= \Vert w^T_t+y_ix_i \Vert ^2 \\ &= \Vert w^T_t \Vert ^2 + 2w^T_ty_ix_i + \Vert y_ix_i \Vert ^2 \\ &\le \Vert w^T_t \Vert ^2 + 0 + \Vert y_ix_i \Vert ^2 (帶給w^T_{t+1}成長的唯有後面那項) \\ &\le \Vert w^T_t \Vert ^2 + 0 + max(\Vert y_nx_n \Vert ^2) \\ \end{split}$ 推導出以下式,證明其角度越來越接近,但有一個最終的最近線(我還沒搞懂這塊QQ) ![](https://i.imgur.com/jjIflIV.png) #### PLA算法有個問題,當資料線性可分時才可以分出來、停下來,取得最佳解 解法如下: ### pocket演算法 前提 $y_n = f(x) \rightarrow 大部分符合$ (否則資料幾乎無跡可尋) $g(x) \approx f(x)$ 因此$g(x)同理$ , $f(x)為犯錯率最少的$ 將點的遍歷從PLA的照順序一直循環,改成random取點,使得其取到的$h$能夠更多元,不會因順序取法偏重某一塊。 設目前最佳$h$為 $w^T_,$ when $w^T_t$ find mistake $({\bf x_i},y_i)$ $w^T_{t+1} = w^T_t+y_i{\bf x_i}$ if $w^T_{t+1}$ mistake < $w^T_,$ $w^T_, = w^T_{t+1}$ after ??? times $g(x) = w^T_t$ 基本上是以PLA為本質做出調整的算法,因此非常相近 ## 多元分類 $y = (1,2,3,4...K)$ K種,不同於二元分類的$y = (+1,-1)$ K如果大到幾乎是所有實數時,就是所謂的迴歸分析 ## 線性回歸(linear aggression) ${\bf x} = (x_0,x_1,x_2...x_N)$ $y \approx \sum_{i=0}^n w_ix_i$ hypothesis $h(x) = w^T{\bf x}$ 在線性回歸不用sign ![](https://i.imgur.com/bW8VUm5.png) https://www.youtube.com/watch?v=qGzjYrLV-4Y&list=PLXVfgk9fNX2I7tB6oIINGBmW50rrmFTqf&index=34 點現越接近越好,因此看離線差(紅線) $E_{in} = \sum^N_{i=1} (h(x_i)-y_i)^2 / N = \sum^N_{i=1} (w^T{\bf x}_i-y_i)^2 / N$ E : error $E_{in}$ : 資料上的誤差 $E_{out}$ : 輸出時犯的錯誤 $\sum^N_{i=1} (w^T{\bf x}_i-y_i)^2 / N = \sum^N_{i=1} ({\bf x}^T_iw-y_i)^2 / N$ $\begin{vmatrix} {\bf x}w^T_1 - y_1 \\ {\bf x}^T_2w^T_2 - y_2 \\ {\bf x}^T_3w^T_3 - y_3 \\ {\bf x}^T_Nw^T_N - y_N \\ \end{vmatrix}^2/N$ = $\begin{vmatrix}\begin{vmatrix} {\bf x}^T_1 \\ {\bf x}^T_2 \\ {\bf x}^T_3 \\ {\bf x}^T_N \\ \end{vmatrix} * w - \begin{vmatrix}y_1 \\y_2 \\y_3 \\ y_N \\ \end{vmatrix}/N\end{vmatrix}^2$ = $\begin{vmatrix} X w - Y \end{vmatrix}^2 /N$ $min(E_{in}(w)) = \begin{vmatrix}X w - Y \end{vmatrix}^2 /N$ 此w表理想的w ![](https://i.imgur.com/VXT2gUp.png) https://www.youtube.com/watch?v=qGzjYrLV-4Y&list=PLXVfgk9fNX2I7tB6oIINGBmW50rrmFTqf&index=34 圖長上面這樣,其為凸函數(有一最高or最低點) #### 方向導數Du ![](https://i.imgur.com/dudlwFg.png) https://www.youtube.com/watch?v=-DumtBiW4HE&t=487s 這是一個雙變數圖形 $\vec{u} = (u_1,u_2)$ 為$(x_0,y_0)對應到f(x,y)的斜向量(長度為1的單位向量)$ $Du 表示 (x_0,y_0)的斜率$ $D_uf(x_0,y_0) = \underbrace{\lim}_{h \rightarrow 0} (f(x_0+hu_1,y0+hu_2)- f(x_0,y0)) / h$ ![](https://i.imgur.com/AIyYKPH.jpg) https://www.youtube.com/watch?v=-DumtBiW4HE&t=487s F(h) 是 全微分 就是$\sum所有變數(變數偏微分*d變數)$ $F_x,F_y$ 是 對x,y偏微分 根據以上算式,最終推導成$<F_x,F_y> . <u_1,u_2> 中間那是內積符號$ #### 梯度 ![](https://i.imgur.com/9ffsJtN.jpg) https://www.youtube.com/watch?v=npkl19rcpdY&t=120s 能夠造就最大方向導數(斜率)的方向,將往最大值趨近 註: $|<u1,u2>|$因為<u1,u2>是單位向量,為1,因此省略 另外,因為梯度本質上像是斜率,因此他需要在一個任意可微分的函數中才可找到(才能有斜率) 而梯度的表示法通常如下 : ![](https://i.imgur.com/pVzmGWb.png) https://chih-sheng-huang821.medium.com/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-%E5%9F%BA%E7%A4%8E%E6%95%B8%E5%AD%B8-%E4%BA%8C-%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D%E6%B3%95-gradient-descent-406e1fd001f 以實例來說就會出現以下結果 ![](https://i.imgur.com/qh1wTwk.png) https://chih-sheng-huang821.medium.com/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-%E5%9F%BA%E7%A4%8E%E6%95%B8%E5%AD%B8-%E4%BA%8C-%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D%E6%B3%95-gradient-descent-406e1fd001f 在我們的機器學習中,x通常被換成w,而w又可以視作一個向量, 以上圖來說,他的方向導數就會是<10單位的$x_1$方向 , 1單位的$x_2$方向>對<f(x)的單位斜向量>內積 梯度就是<10單位的$x_1$方向 , 1單位的$x_2$方向> --- ![](https://i.imgur.com/tLqPZHz.png) https://www.youtube.com/watch?v=2LfdSCdcg1g&list=PLXVfgk9fNX2I7tB6oIINGBmW50rrmFTqf&index=35 ![](https://i.imgur.com/Y6BRErq.png) 因在w有最低點,w下任何梯度下都是0 (底下有梯度筆記) 我們稱理想的w為$w_{LIN}$(LIN 是 linear regression簡寫) 接著把$\begin{vmatrix}X w - Y \end{vmatrix}^2 /N$展開 $\begin{vmatrix}w^TX^TwX - 2w^TX^Ty+ y^Ty \end{vmatrix} /N$ 令$X^TX = a,\ X^Ty = b,\ y^Ty = c$ 化成$\begin{vmatrix}aw^2 - 2bw+ c \end{vmatrix} /N$ ![](https://i.imgur.com/hrD6LWD.png) (我打不出倒三角,只能截圖QQ) 梯度$E_{in}$就是$E_{in}$的微分(因為梯度是斜率) 轉換回$2\begin{vmatrix}X^TXw - X^Ty\end{vmatrix} /N$ #### 尋找$w_{LIN}$ 接者找梯度0的點 ![](https://i.imgur.com/T9NuK6Y.png) 在w中製造反矩陣,即可使其為0 若反矩陣不存在,只能解方程式,求出假反矩陣(效果一樣,但不是真正的反矩陣) 接下來就很顯然的,當我們能透過輸入找出在輸入中的最佳解法,那這就意味著,只要資料量足夠且雜訊不致於過多就能幾乎找到最佳的$E_{out}$ 因此更詳細的數學證明我就暫時不寫了 這時候就會發現一個有趣的問題,這樣我們不就直接解出答案了!!!就不用讓機器去學習了? 事實上這個方法要找到$w_{LIN}$還是需要跑過迴圈等操作,進行高斯消元才能找出$w_{LIN}$,所以實際上我們也會把它視作是機器學習 --- ## 羅吉斯回歸(Logistic regression, logit model) 首先,先了解何謂羅吉斯回歸 基本上他就是線性回歸的變體,不過他的y值從找出線上某個對應的點變成要尋找為某個類別的機率(ex:有80%的機率會成功) 羅吉斯回歸的數學式 : $f({\bf x}) = P(+1|{\bf x}) \in (0,1)$ 其中P為機率的描述法,$P(A|B) 相當於 P(A∩B)/P(B)$ 意味著在B的情況下A的發生率有多少 整句數學式表明了羅吉斯回歸得出的數將為01之間的小數,也就是機率 對於羅吉斯回歸來說,理想的y數據會是0~1之間的機率(以是否的二元分類來看) 但很明顯,我們得到的y通常只會是0或1,因此我們也可視有一般y的data為帶著noise的data 開始推導 $For \ {\bf x} = (x_0,x_1....x_d) (x \rightarrow feature,x_0 = threshold)$ $s = \sum^d_{i=0} x_iw_i$ (s = score) 此處要得到01之間的機率,我們可以帶入一個01之間的S型函數,並將s作為x軸 我們稱這個S型函數為logistic function 使用$\theta(s)$表示 示意圖 : ![](https://i.imgur.com/YcAEEQ6.png) https://www.youtube.com/watch?v=4rPupwSdAac&list=PLXVfgk9fNX2I7tB6oIINGBmW50rrmFTqf&index=41 也就是以下數學式的表示(常用的) ![](https://i.imgur.com/VNBFHTW.png) https://www.youtube.com/watch?v=4rPupwSdAac&list=PLXVfgk9fNX2I7tB6oIINGBmW50rrmFTqf&index=41 這裡我們可以帶入數字看看,會發現當s=0 時得到1/2,當s=無限大 時得到1,當s=-無限大 時得到0 這裡可能就會有人發現有趣的東西了,其實這就是激活函數裏的sigmoid呢 所以總式子是$h({\bf x}) = \theta({\bf w}^T{\bf x})$ 也就是$h({\bf x}) = 1\ /\ 1+e^{(-{\bf w}^T{\bf x})}$ 表示為$h({\bf x}) = 1\ /\ 1+exp(-{\bf w}^T{\bf x})$ #### 關於羅吉斯回歸的$E_{in}$ 現在來探討$E_{in}$ 在一般的分類中,$E_{in}$就是0.1之間符不符合,線性回歸中就是離均差的最小值,至於羅吉斯回歸,我們就直接將y在x中發生的機率改寫 $P(y|{\bf x}) = f({\bf x}) \ or \ 1-f({\bf x})$ 分別對應y=1 or y=-1 再回頭看那張sigmoid圖,會發現他是一張左右對稱的圖,因此$y=-1$時的$1-f(x) = f(-x)$ 這時我們要找f(x)就要符合兩條件,一是f(x)的機率夠大,二是h(x)接近f(x) 這裡我們要用一個逆向的方法解決這個問題 $consider D_{ata} = \{({\bf x_1},+1),({\bf x_2},-1)...({\bf x_N},-1)\}$ 當我們的$f({\bf x})$要製造出D時的可能性會是 : $P({\bf x_1})P(y_1,{\bf x_1}) * P({\bf x_2})P(y_2,{\bf x_2})...*P({\bf x_N})P(y_N,{\bf x_N})$意味著,出現$x_i$的機率*出現$x_i$後,符合$y_i$的機率相乘 因為$f(x) = P(+1|{\bf x})$ 因此可以替換成 $P({\bf x_1})f({\bf x_1}) * P({\bf x_2})f(-{\bf x_2})...*P({\bf x_N})f(-{\bf x})$ 阿因為在Data每個$P({\bf x})$應該要一樣,因此可以不用管他 另外f(x) 可以替換成 h(x) 發現$likelihood(h) \propto \prod^N_{i=1} h(y_i{\bf x}_i) \ \ 註:\prod就是全部相乘的意思,likelihood指可能性$ 接著,因為h就相當於我們線的$\theta({\bf w}^T{\bf x})$所以可以改寫成 $max \ \ likelihood(h) \propto \prod^N_{i=1} \theta(y_i{\bf w}^T{\bf x}_i)$ 再來為了比較好做微積分,把它加上log(用ln表示自然對數(尤拉數作底)),從連乘變成連加 算式為:$likelihood(h) \propto \sum^N_{i=1} ln(\theta(y_i{\bf w}^T{\bf x}_i))$ 接著,因為本來是找可能性最大,但找最小更便於微積分因此加上負號 $min \ \sum^N_{i=1} -ln(\theta(y_i{\bf w}^T{\bf x}_i))$ 另外我們這邊幫他加上一個1/N,為了讓她更像是線性回歸中看到的$E_{in}$,變成 $min \ \frac{1}{N}\sum^N_{i=1} -ln(\theta(y_i{\bf w}^T{\bf x}_i))$ 抱歉我到這才知道$\frac{1}{N}$怎麼打出來,所以前面的都超醜 這裡最後推出$E_{in}$的數學式為 $min \ E_{in}\ =\frac{1}{N}\sum^N_{i=1} ln(1+exp(-y_i{\bf w}^T{\bf x}_i))$這裡做的是就是把$\theta 換成 \frac{1}{1+exp(-y_i{\bf w}^T{\bf x}_i))}$,再把log前的負號去掉,使其變為倒數,就變成上圖了,註:如果exp那句看不懂,請往上翻到S型函數圖那邊。 把$E_{in}$的式子畫成圖之後,會發現其仍是凸函數(convex),這點與線性回歸時的一樣 ![](https://i.imgur.com/lh1E59z.png) 所以我們做一樣的事情,找到梯度為0的地方 這裡我為求好算,先把一些複雜的東西代換掉 設 $a = -y_i{\bf w}^T{\bf x}_i \\ b = 1+exp(-y_i{\bf w}^T{\bf x}_i)$ 我們對$E_{in}(x)$微分找梯度(斜率),再利用連鎖律拆成以下 $\frac{\partial E_{in}({\bf w})}{\partial w_j} = \frac{1}{N}\sum^N_{i=1} \frac{\partial ln(b)}{\partial b}\frac{\partial 1+exp(a)}{\partial a} \frac{\partial -y_i{\bf w}^T{\bf x}_i}{w_j}$ ### 插播 : 對數函數(log)的微分 這裡先帶出指數函數的微分,之後會用到 ![](https://i.imgur.com/7ANhONC.png) 註:尤拉數e的定義為![](https://i.imgur.com/JSfvyml.png) 得出一個重要結論,當一個函數以尤拉數為底x為次數時,對x微分會等於自己 這裡再將以上結論的x換成$log_e x$ $e^{log_e x} = x$ $e^{ln x} = x$ 將兩邊都微分(對x) $\frac{d\ exp(ln x)}{d\ ln x}=exp(ln x)$ 證明的部分回去找書... $\frac{d\ exp(ln x)}{d\ ln x}*\frac{d\ ln x}{dx}=exp(ln x)*\frac{d\ ln x}{d\ x}$ $e^{ln x}(lnx)^{'} = 1$ 得出最終結論,$自然對數x = \frac{1}{x}$ $(lnx)^{'} = \frac{1}{x}$ --- <!-- 定義 $\begin{split} f(x) = \log_a x &= \frac{\log_e x}{\log_e a}(換底公式,e為尤拉數 \\ &= \frac{ln x}{ln a}(ln為自然對數) \end{split}$ $f^{'}(x) = \frac{1}{lna}\frac{1}{x}$ --> 回到我們的對$E_{in}$微分 $\frac{\partial E_{in}({\bf w})}{\partial w_j} = \frac{1}{N}\sum^N_{i=1} (\frac{1}{b})(exp(a))(-y_i{\bf x}_{i,j})$ 註:${\bf x}_{i,j}為{\bf x}_i的第j項,矩陣的其他項對w_j微分相當於常數,都會歸0$ 將b還原 $\frac{\partial E_{in}({\bf w})}{\partial w_j} = \frac{1}{N}\sum^N_{i=1} (\frac{exp(a)}{1+exp(a)})(-y_i{\bf x}_{i,j})$ 轉成$\theta()$ $\frac{\partial E_{in}({\bf w})}{\partial w_j} = \frac{1}{N}\sum^N_{i=1} \theta(a)(-y_i{\bf x}_{i,j})$ 這裡是對一個$w_i$作計算,現在我們再把所有$w_i$合起來變梯度,為下式 ![](https://i.imgur.com/FHc9GVW.png) 現在來找梯度0的地方 $\frac{1}{N}\sum^N_{i=1} \theta(-y_i{\bf w}^T{\bf x}_i)(-y_i{\bf x}_{i}) = 0$ 在這裡要讓所有梯度為0有一個假設的方法,就是令所有$\theta()$為0 要讓$\theta()$為0就要讓裡面的數趨近$-\infty$ 也就是$-y_i{\bf w}^T{\bf x}_i接近\infty$ 而$\infty$為正的,因此$y_i$與${\bf w}^T{\bf x}_i$同號,也就是線性可分,但這明顯是很難達成的 所以我們這裡在回到最初的PLA算法,把他學習的方式帶進來 when $sign(w^T_t*{\bf x_i}) \neq y_i$ (此處的>0放在sigmoid函數中就是>50%的意思) $w_{t+1} \leftarrow w_t+y_i{\bf x_i}$ 這裡我們簡化成一個式子比較好表示,如下: $w_{t+1} \leftarrow w_t+\ if(sign(w^T_t*{\bf x_i}) \neq y_i) * \ y_i{\bf x_i}$ #### 學習率 這裡我們再帶入學習率的觀念,所謂學習率就是梯度改變的速率,在我們的PLA中就是w每次變化的大小 在學習率大的情況下,模型可以修正得更快,但可能錯過局部的最佳解 在學習率小的情況下,模型修正較慢,但是可以更穩定的下降,錯過最佳解機率更小 其符號表示為$\eta$ 大概就這樣吧,後面有關學習率的詳細作用我覺得很顯然,就不詳講了 --- 這裡我們帶入我們的式子變成 $w_{t+1} \leftarrow w_t+\ \eta * if(sign(w^T_t*{\bf x_i}) \neq y_i) * \ y_i{\bf x_i}$ 這也就是梯度下降 ## 梯度下降(gradient descent) 梯度下降算法意義就如字面上的,因為梯度的方向會是斜率最大的方向(往最大值去),因此我們希望往梯度的反向去走 我們最早講到梯度應該是在羅吉斯回歸的地方,從那時候可以看出,我們機器學習要的就是要在一個函數中找到最小值,我們稱此函數為目標函數,在羅吉斯回歸那邊就是$E_{in}$ 就是這句 $w_{t+1} \leftarrow w_t+\ \eta * if(sign(w^T_t*{\bf x_i}) \neq y_i) * \ y_i{\bf x_i}$ ## 激活函數(Activation function) 在神經網路的架構下,一般的輸入輸出相當於激活函數為($f(x) = x$),輸出輸入將會呈正比關係,也就是線性,也就是只能夠解決線性的問題 不過我們機器學習應用的範圍常常是非線性的 因此我們利用非線性方程式解決非線性問題 #### 激活函數的特性? - 非線性 - 這應該就不用多解釋,最初就是為了非線性的特性引進激活函數 - 可微分 - 因為我們的機器學習理論是基於梯度的改變,因此函數可微分才能做到 - 單調性(重要但非必要) - 當函數保持單調性時,我們才能有更穩定的梯度,而不是訓練點跟雲霄飛車一樣飛來飛去 ### Sigmoid ![](https://i.imgur.com/OX3QVI7.png) $S(z) = 1/1+e^{-z}$ 其變化意義上最接近生物的神經元 輸出介於0,1之間 優點 - 非線性 - 梯度較為平穩。 - 對分類來說是好用的。 - Sigmoid輸出介於0~1,因此不管怎麼樣的輸入,都不會造成blow up。 缺點 - 當輸入的絕對值很大時,輸入的輸出的影響會非常小。 - 具有梯度消失的問題。 - 不明原因,待補 - 輸出不是以0為中心的,因此會使梯度更新在不同方向走太多,使優化困難。 - 網路停止學習或速度很慢。 ## 神經網路 ![](https://i.imgur.com/41sjwHs.png) $G({\bf x}) = sign(\sum_{i=1}^T)a_i*\underbrace{sign(w^T_i*{\bf x})}_{g_i({\bf x})}$ $a \rightarrow 各個g的權重$ 而神經網路可以用來做出更複雜的邊線,而非一般的線性分割 以下以線性分隔的邏輯運算為例 ![](https://i.imgur.com/yIeAfzt.png) $g_1$與$g_2$分別代表兩個線性分割,而最做邊的那張圖意味著對兩個g進行AND的邏輯運算, 所以這裡設計一個神經網路如下: ![](https://i.imgur.com/qD0HLDr.png) 將兩個g的權重a都設成+1,另外為了達到AND的效果,我們多添加一個輸出恆為1的常數g,並將其權重$a_0$設為-1以達到必須所有g的輸出皆為1才可判定為True 數學式如下: $G(x) = sign(-1+g_1({\bf x})+g_2({\bf x}))$ 如果要讓更多的線AND就其$a_0$的權重變更小的負數即可 證出我們可以利用神經網路做出複雜的線 此外僅單純用這種邏輯運算,就可以幾乎切出幾近圓形的邊界,即用直線構出平滑線,如下: ![](https://i.imgur.com/xKRPoTy.png) 不過這方法單純從邏輯計算就會出問題,例如在XOR的邏輯運算中,單純的思考明顯是無法用線性分割構出的,如下: ![](https://i.imgur.com/nk3EbKI.png) 不過利用一些轉換,我們可以另類的達到這件事 像是以下數學式就能夠達成 $XOR(g_1,g_2) = OR(AND(g_1,-g_2),AND(-g_1,g_2))$ ![](https://i.imgur.com/yM100VC.png) 再來補充不同方法在輸出面的函式差異 ![](https://i.imgur.com/iiaomJl.png) 至於中間的轉換函數,我們通常會不會使用上面途中的階梯函數(只有01),也不會使用到線性的函數,因為這根本沒有意義,那不如直接用單純的線性回歸來做,不需要做到神經網路,是殺雞焉用牛刀了。 所以我們一般會使用比較平滑的函數,也就是之後會講到的激活函數。 #### 神經網路的轉移 ![](https://i.imgur.com/EKu409L.png) 在這裡我們對神經網路的轉移做基本的解析 首先定義輸入層為第0層,輸出層為第L層,每層節點數量以d表示,意即$d^{(0)}-d^{(1)}-...-d^{(L)}$ 層與層之間的權重w,定義其於i層之後j層之前時,為$w_{ij}$,層數為j,即$w^{(j)}_{ij}$ 其中: 0 <= i <= L-1 1 <= j <= L 而x與w計算後的結果為s(score),表示為: $s^{(l)}_k = \sum^{d^{(l-1)}_{i=0} w^{(j)}_{ij}x^{(i)}_i$ $l$代表為輸進第$l$層的score,$k$代表輸入該層的第k個節點 在經過一層g的轉移後,每個g節點導出的數為$x_k^{(l)}$ 此處$k$為節點的index(base0),$l$為第$l$層輸出的東西 其中$x_k^{(l)}$來源自 $tanh(s^{(l)}_k)$此處tanh代表激活函數,但非必此激活函數 #### 關於網路的訓練 首先定義名詞 我們將神經網路稱為$NN()$,他的輸出為$NN({\bf x}_i)$ 誤差值平方稱為$e_i$ $e_i = (y_i-NN({\bf x}_i))^2$ 我們要找的就是$e_i$跟$w$關係,也就是$e_i$對$w$的微分$\frac{\partial e_i}{\partial w}$