Neural Network Fundamentals (1)

Reference:

Neural Network and Learning Machines: International Edition, 3/e (Author: Haykin, ISBN:9780131293762)
人脑是专用计算机,通过神经元中的链接对经验进行存储;而计算机属于通用计算机,通过设计逻辑算法实现程序。因此结构不同,导致了人脑能够轻易实现 人脸识别,语音辨别等等 不是通过纯逻辑实现的事,因此通用计算机为了能够达到与大脑类似的效果,需要对大脑模型进行模拟,从而实现类似的功能。

大脑的基本结构

Neural Network Fundamentals (1)_第1张图片
大脑由神经元组成,每个神经元由 细胞本体,树突和轴突三部分所组成。 不同神经元之间的信号由轴突输入神经元,经过细胞本体,然后通过树突然后传递到下一个细胞中。(化学信号-电信号-化学信号)

神经元网络的基本特征

  • 一个神经元同时是 多个神经元的受体,也可以将信号传递给多个其他的细胞。(另外细胞也并非单向传递)
  • 神经元的信号是多个细胞信息输入的叠加(信息有正有负,也就是有激活也有抑制)(因为突触是有激励因子,也有抑制因子)
  • 神经元的信号输入和输出并不呈现线性关系。首先存在一定的阈值,当信号超过一定的阈值之后就会快速上升。 简单来看可以看作 sign 函数,输入之和超过一定阈值之后就会激活神经元。
  • 神经元更高强度的兴奋不是有更高的输入造成的,而是由更高频率的有效刺激造成的。

通过大脑结构构建基本神经元模型

  • 一个神经元有多个输入,然后有一个输出。
  • 输入信号来自于不同的神经元,有不同的权重,可正可负(激励型和抑制型)。
  • 神经元本身的输入可以简单看作两个结果: 激励状态 和 未被激励状态。(0和1)
    因此可以将神经元简单看作两个过程:
    过程一: v ( x ⃗ ) = w ⃗ T x ⃗ + b v(\vec x) =\vec w^T \vec x + b v(x )=w Tx +b
    其中, i n p u t : x ⃗ = [ x 1 , x 2 , … , x n ] T , w e i g h t s : w ⃗ = [ w 1 , w 2 , … , w n ] , b : t h r e s h o l d { input: \vec x = [x_1,x_2, \dots, x_n]^T, weights: \vec w =[ w_1,w_2, \dots, w_n], b: threshold } input:x =[x1,x2,,xn]T,weights:w =[w1,w2,,wn],b:threshold
    过程二: y = φ ( v ) y = \varphi(v) y=φ(v)
    其中, φ = s i g n { \varphi = sign} φ=sign, 存在激活函数,当 v > = 0 , y = 1 ; v < 0 , y = 0 { v>=0, y =1; v<0, y=0 } v>=0,y=1;v<0,y=0
    Neural Network Fundamentals (1)_第2张图片
    因此最终的函数可以表示为:
    y = φ ( w ⃗ T x ⃗ + b ) y = \varphi( \vec w^T \vec x +b ) y=φ(w Tx +b)
    因为 阶跃函数不是连续函数,因此最终的函数也不是连续函数,而是单纯两个值的输出。
    当我们将激活函数换成其他的函数,比如
    sigmoid function: φ ( v ) = 1 1 + e − a v {\varphi (v) = \frac{1}{1+e^{-av}}} φ(v)=1+eav1
    tanh function: φ ( v ) = e x − e − x e x + e − x { \varphi(v) = \frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}} φ(v)=ex+exexex
    连续并且可导,那么该神经元结果就是连续并且可导的。

Perceptron

一个神经元在初期被称为感受器perceptron,对感受器的理解是对神经元网路理解的基础。

二分类问题

因为感受器的输出为0和1,因此可以作为感受器,实现标签的分类。 当 w ⃗ T x ⃗ > = 0 {\vec w^T \vec x >=0} w Tx >=0,标签结果为一类; 当 w ⃗ T x ⃗ < 0 { \vec w^T \vec x <0 } w Tx <0,标签结果为另外一类。因此我们可以看到 感受器实际上是一个线性二分类器。通过创造出一条直线或者一个超平面,实现不同标签的分类。 线性可分的问题(linearly separable)才能用感受器实现,而且只要是线性可分,感受器一定能够实现。

如何得到想要的权重

  • 对于低维度的点来说,我们可以直接肉眼观察,然后得到边界线和权重。
  • 对于高维度的分类问题,我们只能通过learning来实现。

问题定义

我们有m个点,对于每一个点 x ⃗ i = [ 1 , x 1 , x 2 , … , x n − 1 ] {\vec x_i = [1, x_1,x_2, \dots, x_{n-1}]} x i=[1,x1,x2,,xn1],然后有想要的标签 d i { d_i } di
我们随机定义了权重 w ⃗ = [ b , w 1 , w 2 , … , w n − 1 ] {\vec w = [b,w_1,w_2, \dots, w_{n-1}]} w =[b,w1,w2,,wn1]
我们想要实现, 对于每一个点,都能实现 φ ( w ⃗ T x ⃗ i ) = d i { \varphi(\vec w^T \vec x_i) = d_i } φ(w Tx i)=di.

问题分析

对于m个点,假设存在一组 w ⃗ {\vec w} w 能够实现所有点的正确划分。
对于 d i = 1 {d_i = 1} di=1的点来说,如果划分错误,使得 w ⃗ T x ⃗ < 0 {\vec w^T \vec x <0} w Tx <0,我们应该更新权重 w ⃗ n = w ⃗ n − 1 + Δ w ⃗ {\vec w_n = \vec w_{n-1} + \Delta \vec w} w n=w n1+Δw Δ w \Delta w Δw 应该能使得 w ⃗ t x ⃗ {\vec w^t \vec x} w tx 整体值变大。 所以 Δ w ⃗ = η x ⃗ ( η > 0 ) { \Delta \vec w = \eta \vec x (\eta>0) } Δw =ηx (η>0)
对于 d i = 0 {d_i=0} di=0的点来说,如果划分错误,我们应该更新权重,使得结果朝着 w ⃗ T x ⃗ { \vec w^T \vec x } w Tx 减小。所以 Δ w ⃗ = − η x {\Delta \vec w = - \eta x} Δw =ηx
我们定义 误差error: e = d i − w ⃗ T x ⃗ i {e = d_i - \vec w^T \vec x_i} e=diw Tx i
那么我们将结果上述结果合起来: Δ w ⃗ = η e x ⃗ {\Delta \vec w = \eta e \vec x} Δw =ηex
η {\eta} η作为权重,能够改变每一步的更新速率。

算法

确定学习速率 η {\eta} η
随机生成权重 w ⃗ {\vec w} w

for x i , d i {x_i, d_i} xi,di in all points
计算 e = d i − w ⃗ T x ⃗ { e = d_i - \vec w^T \vec x } e=diw Tx
然后更新权重: w n = w n − 1 + η e x ⃗ { w_n = w_{n-1} + \eta e \vec x } wn=wn1+ηex

对于线性可分的问题,我们可以等到零误差(所有标签全都正确),再停止结果。 对于线性不可分的问题,我们可以计算一定的循环次数,然后停止。

感受器必然能够实现 线性可分问题的原因

Perceptron Convergence Theorem: (Rosenblatt, 1962)
此文章证明了感受器对于线性可分的问题必然会收敛。

回归问题Neural Network Fundamentals (1)_第3张图片

回归问题难以实现对于所有点的正确标记,因此我们通常将其视为优化问题,所有点的误差之和最少:
E ( w ⃗ ) = 1 2 ∑ n i = 1 e ( i ) 2 = 1 2 ∑ i = 1 n [ d ( i ) − y ( i ) ] 2 {E(\vec w) =\frac{1}{2} \sum_n^{i=1}e(i)^2 =\frac{1}{2} \sum^n_{i=1}[d(i)-y(i)]^2 } E(w )=21ni=1e(i)2=21i=1n[d(i)y(i)]2

分析问题

首先我们定义几个相关变量:

  1. d ⃗ = [ d 1 , d 2 , … , d n ] T \vec d = [d_1,d_2, \dots,d_n]^T d =[d1,d2,,dn]T
  2. X = [ x ⃗ 1 , x ⃗ 2 , … , x ⃗ n ] X=[\vec x_1, \vec x_2, \dots, \vec x_n] X=[x 1,x 2,,x n]
  3. e ⃗ = d ⃗ − X T ⋅ w ⃗ \vec e = \vec d - X^T \cdot \vec w e =d XTw
  4. E ( w ⃗ ) = 1 2 e ⃗ T e ⃗ E(\vec w) =\frac{1}{2} \vec e^T \vec e E(w )=21e Te
    其中 X 的维度是 (m,n),其中 m是变量的维度, n是数据点的数量。
    然后,我们为了得到最优解,我们必须求解cost function梯度为零的点:
    ▽ ( E ( w ⃗ ) ) = 0 ▽ w ⃗ ( E ( w ⃗ ) ) = e ⃗ T ⋅ ( − X T ) ( d ⃗ T − w ⃗ T X ) X T = 0 w ⃗ T X X T = d ⃗ X T X X T w ⃗ = X d ⃗ T w ⃗ = ( X X T ) − 1 X d ⃗ T \begin{aligned} \bigtriangledown ( E(\vec w) ) &= 0 \\ \bigtriangledown_{\vec w} ( E(\vec w) ) &= \vec e^T \cdot (-X^T) \\ (\vec d^T - \vec w^T X) X^T &= 0 \\ \vec w^T X X^T &= \vec d X^T \\ X X^T \vec w &=X \vec d^T \\ \vec w &= (X X^T)^{-1}X \vec d^T \\ \end{aligned} (E(w ))w (E(w ))(d Tw TX)XTw TXXTXXTw w =0=e T(XT)=0=d XT=Xd T=(XXT)1Xd T
    其中 ( X X T ) − 1 (X X^T)^{-1} (XXT)1 也就是 X的伪逆。该方程对于维度较低时较为有用,但是对于较多的数据时,对内存要求比较高。因此,对于较多的数据,可以使用以下的方式: learning。

Learning

我们将 E ( w ⃗ ) E(\vec w) E(w )看作连续可微分的函数,那么我们每次更新 w ⃗ \vec w w 都朝着 使得 E ( w ⃗ ) E(\vec w) E(w )下降最快的方向变化,就能找到局部最优点。
因此,我们每次更新 w ⃗ \vec w w 的公式就是:
w ⃗ n = w ⃗ n − 1 − η ▽ w ⃗ E ( w ⃗ ) w ⃗ n = w ⃗ n − 1 + η e ( n ) x ⃗ ( n ) \begin{aligned} \vec w_n &= \vec w_{n-1} - \eta \bigtriangledown_{\vec w}E(\vec w) \\ \vec w_n &= \vec w_{n-1} + \eta e(n) \vec x(n) \end{aligned} w nw n=w n1ηw E(w )=w n1+ηe(n)x (n)
其中, e ( n ) = d ( n ) − w ⃗ T x ⃗ ( n ) e(n)=d(n)-\vec w^T \vec x(n) e(n)=d(n)w Tx (n)

Multi-layer Perceptron

由于单个感受器只能实现已一条直线的模拟,只能完成对于线性可分的问题的解答,或者对于线性关系尽心拟合,难以完成更加复杂的问题求解,甚至连XOR都难以模拟。因此,出现了多个神经元相连结的神经元网络。

XOR问题引入

对于XOR问题,单个感受器是无法进行模拟的。

input 1 input 2 output
x 1 x_1 x1 x 2 x_2 x2 y y y
0 0 0
1 0 1
0 1 1
1 1 0

Neural Network Fundamentals (1)_第4张图片
因为感受器只能生成一条边界线,无法生成两条。
如果我们使用两个输出,而不是单个输出:
Neural Network Fundamentals (1)_第5张图片
此时我们发现XOR问题中 (0,1) 和 (1,0 )变成了一个点,实现了空间位置的转变,变成了可以线性可分的问题。 此时,将这两个输出作为输入,连接在一个感受器(神经元)上,就可以实现XOR问题的模拟。

多层神经网络

Neural Network Fundamentals (1)_第6张图片
我们在考虑神经网络的层数时,不考虑输入层,只考虑隐藏层和输出层。一个全连接层和一个激活层组成了一个神经网络层。 对于每一层的全连接层,都是 w ⃗ x ⃗ + b \vec w \vec x+b w x +b。对于激活层,我们则可以根据我们的需要进行修改,比如RELU,sigmoid function, atanh函数等等。

LMS 方法

我们仍然将其看成一个优化问题:
需要解决的问题: 我们目前神经网络中的权重都是随机生成的,我们需要通过输出结果和我们的label( d )之间的误差e,对权重进行更新,减小生成的误差。
对于每一个数据点所产生的误差:
E ( i ) = 1 2 ∑ j = 1 n 3 e j ( i ) 2 = 1 2 ∑ j = 1 n 3 [ d j ( i ) − x o u t , j ( 3 ) ( i ) ] 2 E(i) = \frac{1}{2}\sum_{j=1}^{n_3} e_j(i)^2=\frac{1}{2}\sum_{j=1}^{n_3}[d_j(i)- x_{out,j}^{(3)}(i)]^2 E(i)=21j=1n3ej(i)2=21j=1n3[dj(i)xout,j(3)(i)]2
对于同时对一批数据点进行处理:
E = 1 2 ∑ i m ∑ j = 1 n 3 e j ( i ) 2 E =\frac{1}{2} \sum_{i}^{m} \sum_{j=1}^{n_3} e_j(i)^2 E=21imj=1n3ej(i)2
我们对每个点进行分别处理,而不采取批处理,因为批处理容易陷入局部最优;对数据进行分别处理,则有助于增加noise,能够跳出局部最优,因此对每个点单独进行处理则比较好。
我们再使用梯度下降法:
Δ w j i ( s ) ( n ) = − η [ ∂ E ( n ) ∂ w j i ( s ) ( n ) ] T \Delta w_{ji}^{(s)}(n) = - \eta [ \frac{\partial E(n)}{\partial w_{ji}^{(s)}(n)}]^T Δwji(s)(n)=η[wji(s)(n)E(n)]T
其中,s对应第一,二,三层;j是i的下一层。

Back Propagation

第三层权重更新

v j ( 3 ) = ∑ i n 2 w j i ( 3 ) x o u t , i ( 2 ) x o u t , j ( 3 ) = φ ( 3 ) [ v j ( 3 ) ] e r r o r : e j ( n ) = d j ( n ) − x o u t , j ( 3 ) \begin{aligned} v^{(3)}_j &=\sum_i^{n_2}w^{(3)}_{ji} x_{out,i}^{(2)} \\ x_{out,j}^{(3)} &=\varphi^{(3)}[ v_{j}^{(3)} ] \\ error: e_j(n) &= d_j(n)-x_{out,j}^{(3)} \end{aligned} vj(3)xout,j(3)error:ej(n)=in2wji(3)xout,i(2)=φ(3)[vj(3)]=dj(n)xout,j(3)
我们根据链式法则,可以对第三层权重进行更新:
∂ E ∂ w j i ( 3 ) = ∂ E ∂ e j ( n ) ∂ e j ( n ) ∂ x o u t , j ( 3 ) ∂ x o u t , j ( 3 ) ∂ v j ( 3 ) ∂ v j 3 ( ) ∂ w j i ( 3 ) = e j ( n ) ⋅ ( − 1 ) ⋅ φ ( 3 ) ′ [ v j ( 3 ) ] ⋅ x o u t , i ( 2 ) = − e j ( n ) φ ( 3 ) ′ [ v j ( 3 ) ] x o u t , i ( 2 ) \begin{aligned} \frac{\partial E}{\partial w^{(3)}_{ji}} &= \frac{\partial E}{\partial e_j(n)} \frac{\partial e_j(n)}{\partial x^{(3)}_{out,j}} \frac{\partial x^{(3)}_{out,j}}{\partial v_j^{(3)}}\frac{\partial v_j^{3()}}{\partial w^{(3)}_{ji}} \\ &=e_j(n) \cdot (-1)\cdot \varphi^{(3)'}[v_j^{(3)}] \cdot x^{(2)}_{out,i} \\ &= -e_j(n)\varphi^{(3)'}[v^{(3)}_j]x^{(2)}_{out,i} \end{aligned} wji(3)E=ej(n)Exout,j(3)ej(n)vj(3)xout,j(3)wji(3)vj3()=ej(n)(1)φ(3)[vj(3)]xout,i(2)=ej(n)φ(3)[vj(3)]xout,i(2)
另外,我们可以定义 δ j ( 3 ) ( n ) = e j ( n ) φ ( 3 ) ′ [ v j ( 3 ) ] \delta^{(3)}_j(n)=e_j(n)\varphi^{(3)'}[v_j^{(3)}] δj(3)(n)=ej(n)φ(3)[vj(3)],则上式可以写成
∂ E ∂ w j i ( 3 ) = − δ j ( 3 ) ( n ) x o u t , i ( 2 ) ( n ) \frac{\partial E}{\partial w^{(3)}_{ji}}=-\delta_j^{(3)}(n)x^{(2)}_{out,i}(n) wji(3)E=δj(3)(n)xout,i(2)(n)
因此我们可以得到第三层权重的更新公式:
w j i ( 3 ) ( n + 1 ) = w j i ( 3 ) ( n ) + η δ j ( 3 ) ( n ) x o u t , i ( 2 ) ( n ) w_{ji}^{(3)}(n+1) = w_{ji}^{(3)}(n)+ \eta \delta_j^{(3)}(n)x_{out,i}^{(2)}(n) wji(3)(n+1)=wji(3)(n)+ηδj(3)(n)xout,i(2)(n)
其中 δ j ( 3 ) \delta_j^{(3)} δj(3)可以看作输出误差, x o u t , i ( 2 ) ( n ) x_{out,i}^{(2)}(n) xout,i(2)(n)可以看作输入信号。

第二层权重更新

Neural Network Fundamentals (1)_第7张图片
我们采用和上述同样的方式,采用链式法则求解。
∂ E ∂ w j , k ( 2 ) = ∂ E ∂ x o u t , i ( 3 ) ∂ x o u t , i ( 3 ) ∂ v i ( 3 ) ∂ v i ( 3 ) ∂ x o u t , j ( 2 ) ∂ x o u t , j ( 2 ) ∂ v j ( 2 ) ∂ v j ( 2 ) ∂ w j , k ( 2 ) = − e i ( n ) φ ( 3 ) ′ [ v i ( 3 ) ] w i , j ( 2 ) φ ( 2 ) ′ [ v j ( 2 ) ] x o u t , k ( 1 ) = − δ i ( 3 ) w i , j ( 2 ) φ ( 2 ) ′ [ v j ( 2 ) ] x o u t , k ( 1 ) \begin{aligned} \frac{\partial E}{\partial w_{j,k}^{(2)}} &=\frac{\partial E}{\partial x^{(3)}_{out,i}} \frac{\partial x^{(3)}_{out,i}}{ \partial v_i^{(3)}} \frac{ \partial v_i^{(3)}}{\partial x_{out,j}^{(2)}}\frac{ \partial x_{out,j}^{(2)} }{ \partial v_{j}^{(2)} } \frac{\partial v_{j}^{(2)}}{\partial w_{j,k}^{(2)} } \\ &=-e_{i}(n) \varphi^{(3)'}[ v_i^{(3)} ]w^{(2)}_{i,j} \varphi^{(2)'}[ v_j^{(2)}] x^{(1)}_{out,k} \\ &= -\delta_i^{(3)}w^{(2)}_{i,j}\varphi^{(2)'}[v_j^{(2)}]x_{out,k}^{(1)} \end{aligned} wj,k(2)E=xout,i(3)Evi(3)xout,i(3)xout,j(2)vi(3)vj(2)xout,j(2)wj,k(2)vj(2)=ei(n)φ(3)[vi(3)]wi,j(2)φ(2)[vj(2)]xout,k(1)=δi(3)wi,j(2)φ(2)[vj(2)]xout,k(1)
但是我们可以看到上式的i是一个不定量,因为我们在对 w j , k ( 2 ) w_{j,k}^{(2)} wj,k(2)进行求导的时候,我们没有包含i的信息。而且 w j , k ( 2 ) w_{j,k}^{(2)} wj,k(2)对于第三层中的所有输出都会有影响,因此实际上这里的链式法则应该对i进行求和!
∂ E ∂ w j , k ( 2 ) = − ∑ i n 3 [ δ i ( 3 ) w i , j ( 3 ) ] φ ( 2 ) ′ [ v j ( 2 ) ] x o u t , k ( 1 ) \begin{aligned} \frac{\partial E}{\partial w_{j,k}^{(2)}} =- \sum_i^{n_3} [ \delta_i^{(3)}w^{(3)}_{i,j}]\varphi^{(2)'}[v_j^{(2)}]x_{out,k}^{(1)} \end{aligned} wj,k(2)E=in3[δi(3)wi,j(3)]φ(2)[vj(2)]xout,k(1)
此时,我们定义一个变量: δ j ( 2 ) = ∑ i n 3 [ δ i ( 3 ) w i , j ( 3 ) ] φ ( 2 ) ′ [ v j ( 2 ) ] \delta_j^{(2)}=\sum_i^{n_3} [ \delta_i^{(3)}w^{(3)}_{i,j}]\varphi^{(2)'}[v_j^{(2)}] δj(2)=in3[δi(3)wi,j(3)]φ(2)[vj(2)]
那么第二层的权重可以写作:
Δ w j , k ( 2 ) = − δ j ( 2 ) x o u t , k ( 1 ) \Delta w_{j,k}^{(2)} = - \delta_{j}^{(2)}x_{out,k}^{(1)} Δwj,k(2)=δj(2)xout,k(1)

第一层权重

同样的形式,我们可以写成:
δ k ( 1 ) = ∑ j n 2 [ δ j ( 2 ) w j k ( 2 ) ] φ ( 1 ) ′ [ v k ( 1 ) ] Δ w k , l ( 1 ) = − δ k ( 1 ) x l \begin{aligned} \delta_k^{(1)} &=\sum_j^{n_2}[\delta^{(2)}_j w^{(2)}_{jk}] \varphi^{(1)'}[v^{(1)}_k]\\ \Delta w^{(1)}_{k,l} &= -\delta_k^{(1)}x_{l} \\ \end{aligned} δk(1)Δwk,l(1)=jn2[δj(2)wjk(2)]φ(1)[vk(1)]=δk(1)xl

Back Propagation

我们可以看到,对于每一个数据点 [ x 1 ( n ) , x 2 ( n ) , … , x m ( n ) ] T [x_1(n), x_2(n), \dots, x_m(n)]^T [x1(n),x2(n),,xm(n)]T,我们可以正向传递得到最后的结果,然后根据正向得到的 δ i ( 3 ) \delta_i^{(3)} δi(3)反向去求解 δ j ( 2 ) \delta_j^{(2)} δj(2),根据 δ j ( 2 ) \delta_j^{(2)} δj(2)求解之前的 δ k ( 1 ) \delta_k^{(1)} δk(1),根据不同层的 δ \delta δ对不同层的权重进行更新。
Neural Network Fundamentals (1)_第8张图片

真正的权重更新

Δ w j i ( s ) ( k ) = α Δ w j i ( s ) ( k − 1 ) + η ( s ) δ j ( s ) ( k ) x o u t , i ( s − 1 ) ( k ) = α 2 Δ w j i ( s ) ( k − 2 ) + η ( s ) [ α δ j ( s ) ( k − 1 ) x o u t , i ( s − 1 ) ( k − 1 ) + δ j ( s ) ( k ) x o u t , i ( s − 1 ) ( k ) ] = η ( s ) ∑ t = 0 k α k − t δ j ( s ) ( t ) x o u t , i ( s − 1 ) ( t ) \begin{aligned} \Delta w_{ji}^{(s)}(k) &= \alpha \Delta w_{ji}^{(s)}(k-1)+ \eta^{(s)}\delta_j^{(s)}(k)x^{(s-1)}_{out,i}(k) \\ &= \alpha^2 \Delta w_{ji}^{(s)}(k-2) + \eta^{(s)}[ \alpha \delta_j^{(s)}(k-1)x^{(s-1)}_{out,i}(k-1) +\delta_j^{(s)}(k)x^{(s-1)}_{out,i}(k) ] \\ &=\eta^{(s)}\sum_{t=0}^{k} \alpha^{k-t}\delta_j^{(s)}(t) x_{out,i}^{(s-1)}(t) \end{aligned} Δwji(s)(k)=αΔwji(s)(k1)+η(s)δj(s)(k)xout,i(s1)(k)=α2Δwji(s)(k2)+η(s)[αδj(s)(k1)xout,i(s1)(k1)+δj(s)(k)xout,i(s1)(k)]=η(s)t=0kαktδj(s)(t)xout,i(s1)(t)
这样每次权重的更新 都是之前所有误差项的加权平均。 越往后的误差项,权重越高。这样的更新相当于增加了惯性项。 同时权重的更新并不只是一个点数据的影响,而是之前所有点数据的影响:这样的梯度方向相当于能够使得之前所有的点误差减小,因此能够使得结果更加的稳定。

更新停止的几种方式:

  1. 总误差小于阈值
  2. 总的迭代次数到了一定值
  3. 误差的平均值的变化趋于0
  4. 权重的变化趋于0

神经网络如何设计

目的: 神经网络作为黑箱,能够模拟各种连续的非线性函数,但是我们在期望神经网络能够较好模拟训练集的同时,也具有泛化(generalization)的能力,希望其能够在测试集(非训练集)上有较好的性能,而不是过度拟合。
因此,我们在对神经网络的结构进行设计时,需要考虑到神经网络的参数多少,尽量使用较少的神经元(较少的参数)实现我们想要的曲线拟合。同时还需要对神经网络的输入输出进行一定的规定,以实现更好的结果。

输入正则化处理

  1. 对于不同物理含义的输入,我们应该将其范围限制在[-1,1]或者相近的范围内。另外,输入的范围设置为有正有负,则能够保证 权重不朝一个方向更新。
  2. 我们应该保证输入量中 数值的距离相同。对于26个字母,我们应该使用 [ 0 , 0 , … , 1 ] T [0,0,\dots,1]^T [0,0,,1]T这样的方式对其进行表示。

如何选择合适的神经元数量

尝试与选择:

  1. 选择小尺寸的神经元网络,然后扩大神经元的尺寸。
  2. 选择大尺寸的神经元网络,然后减少神经元的尺寸。
    另外对于单隐藏层的神经网络,对低维度的函数进行模拟的时候,我们可以根据模拟函数的段数选择神经元的数量。

对于单隐藏层的神经网络,我们选择分段线性的激活函数:
Neural Network Fundamentals (1)_第9张图片
y ( x ) = w ( 2 ) φ [ v ] + b ( 2 ) y(x) = w^{(2)} \varphi[v]+b^{(2)} y(x)=w(2)φ[v]+b(2)
Neural Network Fundamentals (1)_第10张图片
对于每一个隐藏层的神经元,都可以实现在一段空间内线性增长或下降,同时不影响其他的空间。
Neural Network Fundamentals (1)_第11张图片
因此,对于低维度的函数模拟时,函数有几段,我们可以初步使用几个神经元进行模拟,然后在此基础上进行修改神经元数目。
另外,我们可以不使用分段线性函数,而使用tanh 或者sigmoid函数,可以实现中间部分线性,两侧光滑的效果。
对于单层神经元就可以实现函数的分段拟合,我们为什么需要多层神经元呢:
因为使用多层神经元可以减少神经元总数的使用。多层的神经元能够更好的模拟函数,尤其是对于多个函数相加的情况。使用多层神经元,最后一层隐藏层的神经元数量等于 多种函数的数量,每一个隐藏层实现一个函数的模拟。
但是多层神经元对函数的模拟会出现波动。

另外,我们可以引入 E w E_w Ew来限制神经网络中权重的大小。因为权重越大,对于函数的增益越大,越容易造成函数的较大波动。 我们可以引入对于较大权重的惩罚 E w E_w Ew.
E w = ∑ i = 1 N ( w i ( 2 ) w i ( 1 ) ) 2 E_w=\sum_{i=1}^{N}(w^{(2)}_i w^{(1)}_i)^2 Ew=i=1N(wi(2)wi(1))2

Singular Value Decomposition (SVD)

H N × n = U N × N Σ N × n V n × n T H_{N \times n}=U_{N \times N} \Sigma_{N \times n}V^{T}_{n \times n} HN×n=UN×NΣN×nVn×nT
Neural Network Fundamentals (1)_第12张图片
其中 U N × N U_{N \times N} UN×N V n × n V_{n \times n} Vn×n都是正交矩阵,因此 Σ \Sigma Σ和H 的秩相同。但是 σ 1 , σ 2 , … , σ k \sigma_1,\sigma_2,\dots,\sigma_k σ1,σ2,,σk中可能存在近似于0的值,也可以看作为0.因此矩阵的有效秩会小于k。
对于最后一层隐藏层含有m个神经元的神经网络,如果有n个数据点,那么每一个数据点,传入神经网络在最后一层隐藏层会生成 [ x 1 ( i ) , x 2 ( i ) , … , x m ( i ) ] [x_1(i),x_2(i),\dots,x_m(i)] [x1(i),x2(i),,xm(i)]的行向量,从而对于所有的n个数据,一共生成H矩阵,维度为 n × m n \times m n×m。 当m较大时,就会出现 矩阵的秩小于m的情况,此时说明了神经元出现了闲置的情况,因此应该减少神经元的数量。

对于特征值 σ \sigma σ的大小都是相对的,因此在确定有效秩时,一般常采用以下两个公式:
Neural Network Fundamentals (1)_第13张图片LInk: Neural Network Fundamentals (2)

你可能感兴趣的:(深度学习,人工智能,深度学习)