神经元:多个输入---->权重—>偏置—>激励函数—>输出
符号表示:x为输入函数,W为权重,b为偏置常量,f为激励函数,y为输出
则 y = f ( ∑ ( x i ∗ w i + b ) ) y=f(\sum(x_i * w_i+b)) y=f(∑(xi∗wi+b))
在神经网络中,网络层包括输入层
,中间层(隐藏层)
,输出层
。
正向传播:从转递输入信息到产生输出的过程
反向传播:从输出向输入逆向传递信息的过程
符号表示:
前面网络层有m个,后面网络层有n个。则Wij:前面网络层i对后面网络层j的权重,W为m *n的矩阵。
上层网络层有m个神经元,即上层网络的输出向量的元素为m。
i作为上层网络的下标,j作为下层网络的下标。
Y i = X j = ( x 1 , x 2 , x 3 . . . x m ) Y_i=X_j=(x_1,x_2,x_3...x_m) Yi=Xj=(x1,x2,x3...xm) 下层网络层的每一个神经元都有m个输入
下层神经网络的神经元偏置 B j = ( b 1 , b 2 , b 3 . . . b n ) B_j=(b_1,b_2,b_3...b_n) Bj=(b1,b2,b3...bn)
下层神经网络的输出为 Y j = ( y 1 , y 2 , y 3 . . . y n ) Y_j=(y_1,y_2,y_3...y_n) Yj=(y1,y2,y3...yn)
则 Y j = f ( ∑ ( X j ∗ W i j ) + B j ) Yj=f(\sum(X_j *W_{ij})+B_j) Yj=f(∑(Xj∗Wij)+Bj)
numpy.where(x<=0,0,1)
numpy.where(1/1+exp(-x))
sigmid的导数: y ′ = ( 1 − y ) ∗ y y'=(1-y)*y y′=(1−y)∗y
numpy内置tanh函数: t a n h ( x ) = ( e x p ( x ) − e x p ( − x ) ) ( e x p ( x ) + e x p ( − x ) ) tanh(x)=\frac{(exp(x)-exp(-x))}{(exp(x)+exp(-x))} tanh(x)=(exp(x)+exp(−x))(exp(x)−exp(−x))
numpy.tanh(x)
numpy.where(x<=0,0,x)
numpy.where(x<=0,0.01*x,x)
对于ReLU的优化,对负数区域增加小的梯度避免出现:dying ReLU现象
用于输出回归函数的输出层:y=x
y = e x p ( X ) / ∑ e x p ( X k ) y=exp(X)/\sum exp(X_k) y=exp(X)/∑exp(Xk)
numpy.exp(x)/numpy.sum(numpy.exp(x))
对输出与正确答案的误差进行定义的函数就是损失函数
E = 1 2 ∑ ( y k − t k ) 2 E=\frac{1}{2}\sum(y_k-t_k)^2 E=21∑(yk−tk)2
其中 E 表示误差, y k y_k yk表示输出层的各个输出值, t k t_k tk表示正确答案
import numpy as np
def square_sum(y,t):
1.0/2.0*np.sum(np.square(y-t))
E = − ∑ t k l o g ( y k ) E=-\sum t_klog(y_k) E=−∑tklog(yk)
其中 E 表示误差, t k t_k tk表示正确答案, y k y_k yk表示输出答案,由于 t k t_k tk是独热编码,故只有唯一正确为1的项对误差产生影响。
import numpy as np
def cross_entropy(y,t):
return -np.sum(t*np.log(y+1e-7))
∆ ω \omega ω= φ y i y j \varphi y_i y_j φyiyj
其中 Δ ω \Delta \omega Δω 表示为连接强度(权重)的变化量, φ \varphi φ 为一常量, y i y_i yi 表示为突触前膜神经元的兴奋程度, y j y_j yj 表示为突触后膜神经元的兴奋程度。
意义:突触前膜和突触后膜产生的兴奋使突触的能量传递效率增强。与之相反,长时间没有兴奋,突触的能量传递效率衰退。
Δ ω = η ( y j − t ) y i \Delta\omega=\eta(y_j-t)y_i Δω=η(yj−t)yi
其中 Δ ω \Delta \omega Δω 表示为权重的变化量, y i y_i yi 突触的前神经元的输出, y j y_j yj 表示突触的后神经元的输出,t表示正确答案, η \eta η表示学习系数的常数。
意义:
更新公式:
w ← w − η ∂ E ∂ w w\leftarrow w-\eta\frac{∂ E}{∂ w} w←w−η∂w∂E
b ← b − η ∂ E ∂ b b\leftarrow b-\eta\frac{∂ E}{∂ b} b←b−η∂b∂E
优点:随机选样本,不容易掉入局部最优解。简单确定更新量,简单的代码实现。
缺点:在学习的过程中无法对更新量灵活调整
w ← w − η ∂ E ∂ w + α Δ w w\leftarrow w-\eta\frac{∂ E}{∂ w}+\alpha\Delta w w←w−η∂w∂E+αΔw
b ← b − η ∂ E ∂ b + α Δ b b\leftarrow b-\eta\frac{∂ E}{∂ b}+\alpha\Delta b b←b−η∂b∂E+αΔb
α \alpha α决定惯性的强度常量, Δ w \Delta w Δw表示前一次的更新量
优点:防止更新量的急剧变化
缺点:必须事先给定 η \eta η和 α \alpha α,增加网络调整的难度。
h ← h + ( ∂ E ∂ w ) 2 h\leftarrow h+(\frac{∂ E}{∂ w})^2 h←h+(∂w∂E)2
w ← w − η 1 h ∂ E ∂ w w\leftarrow w-\eta\frac{1}{\sqrt{h}}\frac{∂ E}{∂ w} w←w−ηh1∂w∂E
h ← h + ( ∂ E ∂ b ) 2 h\leftarrow h+(\frac{∂ E}{∂ b})^2 h←h+(∂b∂E)2
b ← b − η 1 h ∂ E ∂ b b\leftarrow b-\eta\frac{1}{\sqrt{h}}\frac{∂ E}{∂ b} b←b−ηh1∂b∂E
优点:对更新量进行调整
缺点:更新量持续减少
h ← ρ h + ( 1 − ρ ) ( ∂ E ∂ w ) 2 h\leftarrow \rho h+(1-\rho)(\frac{∂ E}{∂ w})^2 h←ρh+(1−ρ)(∂w∂E)2
w ← w − η 1 h ∂ E ∂ w w\leftarrow w-\eta\frac{1}{\sqrt{h}}\frac{∂ E}{∂ w} w←w−ηh1∂w∂E
h ← ρ h + ( 1 − ρ ) ( ∂ E ∂ b ) 2 h\leftarrow \rho h+(1-\rho)(\frac{∂ E}{∂ b})^2 h←ρh+(1−ρ)(∂b∂E)2
b ← b − η 1 h ∂ E ∂ b b\leftarrow b-\eta\frac{1}{\sqrt{h}}\frac{∂ E}{∂ b} b←b−ηh1∂b∂E
ρ \rho ρ一般设置为0.9。
m 0 = v 0 = 0 m_0=v_0=0 m0=v0=0
m t = β 1 m t − 1 + ( 1 − β 1 ) ∂ E ∂ w m_t=\beta_1m_{t-1}+(1-\beta_1)\frac{∂ E}{∂ w} mt=β1mt−1+(1−β1)∂w∂E
v t = β 2 v t − 1 + ( 1 − β 2 ) ( ∂ E ∂ w ) 2 v_t=\beta_2v_{t-1}+(1-\beta_2)(\frac{∂ E}{∂ w})^2 vt=β2vt−1+(1−β2)(∂w∂E)2
m t ^ = m 0 t 1 − β 1 t \hat{m_t}=\frac{m_{0t}}{1-\beta_1^t} mt^=1−β1tm0t
v t ^ = v t 1 − β 2 t \hat{v_t}=\frac{v_t}{1-\beta_2^t} vt^=1−β2tvt
w ← w − η m t ^ v t ^ + ο w \leftarrow w-\eta\frac{\hat{m_t}}{\sqrt{\hat{v_t}}+\omicron} w←w−ηvt^+οmt^
t表示重复次数