您现在的位置是:首页 >技术杂谈 >深度学习(神经网络)网站首页技术杂谈

深度学习(神经网络)

Elsa的迷弟 2024-07-23 12:01:02
简介深度学习(神经网络)

神经网络历史


  • 提出形式神经元模型(M-P模型)(1943)
  • 提出感知器(1958)
  • 感知器无法解决线性不可分问题(1969)

  • 提出神经认知机(1980)
  • 提出霍普菲尔德模型(1982)
  • 提出误差反向传播算法(1986)
  • 提出卷积神经网络(1989)

  • 提出将 预训练和自编码器 与 深度神经网络 相结合(2006)
  • 提出在卷积神经网络中引入ReLU作为激活函数(2012)

形式神经元模型(M-P模型)

  • 多个输入结点 x i x_i xi 对应一个输出结点
  • 每个输入结点乘以连接权重 w i w_i wi,相加得到 y y y
  • y大于阈值h,输出1,否则输出0。

感知器

感知器能够通过训练自动确定参数

引入误差修正学习:根据实际输出与期望输出的差值调整权重 w i w_i wi 和阈值 h h h

多层感知器

多层结构的感知器 递阶组成 输入值向前传播的网络。(前馈网络、正向传播网络)

通常采用三层结构:输入层,中间层,输出层。

误差反向传播算法

通过比较实际输出和期望输出得到的误差信号,把误差信号从输出层逐层向前传播得到各层的误差信号,再通过调整各层的连接权重以减小误差。

通过实际输出和期望输出之间的误差 E E E梯度进行调整。

例:
y 1 = w 1 x + 1 , w 1 = 2 y 2 = w 2 y 1 2 , w 2 = 1 ; y_1 = w_1x + 1,w_1 = 2\ y_2 = w_2y_1^2,w_2 = 1; y1=w1x+1w1=2y2=w2y12w2=1;
现输入 x = 1 x = 1 x=1 ,期望输出 y 2 = 3 y_2 = 3 y2=3

代入求得: y 1 = 2 ∗ 1 + 1 = 3 y_1 = 2 * 1 + 1 = 3 y1=21+1=3 y 2 = 1 ∗ 3 2 = 10 y_2 = 1 * 3^2 = 10 y2=132=10

误差 E E E:与期望值相差 3 − 10 = − 7 3-10 = -7 310=7

误差反向传播的梯度
∂ y 2 ∂ w 2 = y 1 2 = 9 ∂ y 2 ∂ w 1 = ∂ ( w 1 x + 1 ) 2 ∂ w 1 = 2 x 2 w 1 + 2 x = 6 或 = ∂ y 2 ∂ y 1 ∂ y 1 ∂ w 1 = 2 w 2 y 1 ∗ x = 6 frac{partial y_2}{partial w_2} = y_1^2 = 9 \ quad\ frac{partial y_2}{partial w_1} = frac{partial (w_1x+1)^2}{partial w_1} = 2x^2w_1 + 2x = 6\ 或\ =frac{partial y_2}{partial y_1}frac{partial y_1}{partial w_1} = 2w_2y_1 * x= 6 w2y2=y12=9w1y2=w1(w1x+1)2=2x2w1+2x=6=y1y2w1y1=2w2y1x=6

梯度的意义:
∂ y ∂ w :当 w = w + △ w ,则 y = y + ∂ y ∂ w △ w frac{partial y}{partial w}:当w = w + igtriangleup w,则y = y + frac{partial y}{partial w}igtriangleup w wy:当w=w+w,则y=y+wyw

已知:
误差为 − 7 ,梯度 ∂ y 2 ∂ w 2 = 9 , ∂ y 2 ∂ w 1 = 6 误差为-7,梯度 frac{partial y_2}{partial w_2} = 9,frac{partial y_2}{partial w_1} =6 误差为7,梯度w2y2=9w1y2=6
故可修改( η 表示学习率,设 η = 1 eta 表示学习率,设eta =1 η表示学习率,设η=1 )
w 1 = w 1 + η E ∂ y 2 ∂ w 1 = 2 + 1 ∗ ( − 7 ) / 6 = 2 − 7 / 6 = 5 / 6 w 2 = w 2 + η E ∂ y 2 ∂ w 2 = 1 + 1 ∗ ( − 7 ) / 9 = 1 − 7 / 9 = 2 / 9 w_1 = w_1 + frac{eta E}{frac{partial y_2}{partial w_1} } = 2 + 1*(-7)/6 = 2 - 7/6= 5/6\ quad\ w_2 = w_2 + frac{eta E}{frac{partial y_2}{partial w_2} } = 1 + 1 * (-7)/9 = 1-7/9 = 2/9 w1=w1+w1y2ηE=2+1(7)/6=27/6=5/6w2=w2+w2y2ηE=1+1(7)/9=17/9=2/9

w 1 , w 2 已被调整为新值, w 1 = 5 6 , w 2 = 2 9 w_1,w_2已被调整为新值,w_1 = frac{5}{6},w_2=frac{2}{9} w1,w2已被调整为新值,w1=65w2=92
将此值带入原式计算,
y 1 = 11 6 , y 2 = 121 162 y_1 = frac{11}{6} , y_2 = frac{121}{162} y1=611,y2=162121
可看到, y 2 y_2 y2从原先的 10 10 10 被调整到了 121 / 162 121/162 121/162,可以看到,通过误差反向传播确实可以修正权值 w 1 , w 2 w_1,w_2 w1,w2
但是过大的学习率会导致结果过拟合,如上,我们需要最后值为3,但修改后的值甚至小于了1。因此调整合适的学习率 η eta η是必须的。

误差函数和激活函数

【机器学习基础】2、代价函数损失函数汇总

误差函数

用于计算误差值 E E E

引自:https://www.cnblogs.com/go-ahead-wsg/p/12346744.html

二次代价函数

C = 1 2 n ∑ x 1 , … x n ∥ y ( x ) − a L ( x ) ∥ 2 C=frac{1}{2 n} sum_{x_{1}, ldots x_{n}}left|y(x)-a^{L}(x) ight|^{2} C=2n1x1,xn y(x)aL(x) 2

  • C表示代价函数
  • x表示样本
  • y表示实际值
  • a表示输出值
  • n表示样本的总数;

其中 a = σ ( z ) , z = ∑ w j ∗ x j + b a=sigma(z), z=sum w_j*x_j +b a=σ(z),z=wjxj+b

  • a代表激活函数的输出值
  • σ代表sigmoid函数

∂ C ∂ w = ( a − y ) σ ′ ( z ) x ∂ C ∂ b = ( a − y ) σ ′ ( z ) frac {partial C} {partial w} = (a-y)sigma' (z)x \quad\ frac {partial C} {partial b} = (a-y)sigma' (z) wC=(ay)σ(z)xbC=(ay)σ(z)

注:由于反向误差梯度与sigmoid函数的导数有关,而sigmoid函数的导数会在值较大时有较小的倒数,故会导致权值调整较小。
如下图所示:
在这里插入图片描述
因此引入交叉熵代价函数

交叉熵代价函数

交叉熵代价函数(Cross-entropy cost function)是用来衡量人工神经网络(ANN)的预测值与实际值的一种方式。与二次代价函数相比,它能更有效地促进ANN的训练。

C = − 1 n ∑ x 1 , x n [ y ln ⁡ a + ( 1 − y ) ln ⁡ ( 1 − a ) ] C=-frac{1}{n} sum_{x_{1}, x_{n}}[y ln a+(1-y) ln (1-a)] C=n1x1,xn[ylna+(1y)ln(1a)]

  • C表示代价函数
  • x表示样本
  • y表示实际值
  • a表示输出值
  • n表示样本的总数;
    a = σ ( z ) , z = ∑ w j ∗ x j + b σ ′ ( z ) = σ ( z ) ( 1 − σ ( x ) ) a=sigma(z), z=sum w_j*x_j +b\ quad\ sigma'(z) = sigma(z)(1-sigma (x)) a=σ(z),z=wjxj+bσ(z)=σ(z)(1σ(x))

梯度求解
∂ C ∂ w j = − 1 n ∑ x ( y σ ( z ) − ( 1 − y ) 1 − σ ( z ) ) ∂ σ ∂ w j = − 1 n ∑ x ( y σ ( z ) − ( 1 − y ) 1 − σ ( z ) ) σ ′ ( z ) x j = 1 n ∑ x σ ′ ( z ) x j σ ( z ) ( 1 − σ ( z ) ) ( σ ( z ) − y ) = 1 n ∑ x x j ( σ ( z ) − y ) ∂ C ∂ b = 1 n ∑ x ( σ ( z ) − y ) egin{aligned} frac{partial C}{partial w_{j}} & =-frac{1}{n} sum_{x}left(frac{y}{sigma(z)}-frac{(1-y)}{1-sigma(z)} ight) frac{partial sigma}{partial w_{j}} \ & =-frac{1}{n} sum_{x}left(frac{y}{sigma(z)}-frac{(1-y)}{1-sigma(z)} ight) sigma^{prime}(z) x_{j} \ & =frac{1}{n} sum_{x} frac{sigma^{prime}(z) x_{j}}{sigma(z)(1-sigma(z))}(sigma(z)-y) \ & =frac{1}{n} sum_{x} x_{j}(sigma(z)-y) \ frac{partial C}{partial b} & =frac{1}{n} sum_{x}(sigma(z)-y) end{aligned} wjCbC=n1x(σ(z)y1σ(z)(1y))wjσ=n1x(σ(z)y1σ(z)(1y))σ(z)xj=n1xσ(z)(1σ(z))σ(z)xj(σ(z)y)=n1xxj(σ(z)y)=n1x(σ(z)y)

可以看出:权值 w w w 和偏执值 b b b 的调整与 σ ′ ( z ) σ′(z) σ(z) 无关,另外,梯度公式中的 σ ( z ) − y σ(z)−y σ(z)y
表示输出值与实际值放入误差。所以当误差越大时,梯度就越大,参数w和b的调整就越快,训练的速度也就越快。

总结:当输出神经元是线性的,那么二次代价函数就是一种合适的选择。如果输出神经元是S型函数,那么比较适合交叉墒代价函数。

激活函数

激活函数类似于人类神经元,对输入信号进行线性或非线性变换。

  • M-P模型中使用step函数作为激活函数
  • 多层感知器中使用sigmoid函数,或tanh函数(双曲正切函数)
  • 最近几年在深度学习中,修正线性单元(Rectified Linear Unit,ReLU)

sigmoid函数

f ( u ) = 1 1 + e − u u = ∑ i = 1 n w i x i f(u) = frac{1}{1+e^{-u}} \quad\ u = sum_{i=1}^nw_ix_i f(u)=1+eu1u=i=1nwixi
偏导数:
∂ f ( u ) ∂ u = f ( u ) ( 1 − f ( u ) ) frac{partial f(u)}{partial u} = f(u)(1-f(u)) uf(u)=f(u)(1f(u))

RELU函数

f ( u ) = m a x ( 0 , u ) ∂ f ( u ) ∂ u = 1 f(u) = max(0,u)\ quad\ frac{partial f(u)}{partial u} = 1 f(u)=max(0,u)uf(u)=1

似然函数

似然函数用于计算多层感知器的输出结果,通常以softmax函数作为似然函数。

softmax函数

p ( y k ) = e x p ( u 2 k ) ∑ q = 1 Q e x p ( u 2 q ) p(y^k) = frac{exp(u_{2k})}{sum_{q=1}^Q exp(u_{2q})} p(yk)=q=1Qexp(u2q)exp(u2k)
softmax函数的分母是对输出层所有单元(q = 1,······,Q)的激活函数值的求和,起到归一化的作用。

随机梯度下降法

使用部分训练样本进行迭代计算,这种方法叫做随机梯度下降法(Stochastic Gradient Descent,SGD),与之相对的是批量学习方法。

批量学习方法

计算时遍历全部训练样本,设第 t t t 次迭代各训练样本误差为 E n t E_n^t Ent ,通过所有误差项计算全部训练样本误差:
E = ∑ n = 1 n E n E = sum_{n=1}^n E_n E=n=1nEn
基于全部训练样本得到权重权重调整值并修正网络连接权重
w = w − η ∂ E ∂ w w = w - eta frac{partial E}{partial w} w=wηwE
然后使用调整后的连接权重测试全部训练样本,如此反复迭代计算权重调整并修正网络。

  • 优点:能有效抑制训练集内带噪声的样本所导致的输入模式剧烈变动
  • 缺点:每次调整连接权值,所有样本都要参与训练,所有训练时间长

在线学习

逐个输入训练样本

由于在线学习每次迭代计算一个训练样本,所以训练样本的差异会导致结果出现大幅变动。
迭代结果的变动可能导致训练无法收敛。

小批量梯度下降法

介于在线学习和批量学习之间,将训练集分成几个子集D,每次迭代使用一个子集。

小批量下降法能够缩短单次训练时间,又能降低迭代结果的变动。

由于随机梯度下降法只使用部分训练样本,每次迭代后样本集的趋势都会发生变化,所以减少了迭代结果陷入局部最优解的情况。

学习率

用来确定权重连接调整的系数。

如果学习率过大,则有可能修正过头
如果学习率较小,收敛速度会很慢。

自适应调整学习率—AdaGrad方法

用学习率除以截至当前时刻 t t t 的梯度 ▽ E igtriangledown E E 的累计值,得到神经网络的连接权重 w w w.

w = w − η ▽ E ( t ) ∑ i = 1 t ( ▽ E ( i ) ) 2 + ε w = w - etafrac{igtriangledown E^{(t)}}{sqrt{ sum_{i=1}^t(igtriangledown E^{(i)})^2 +}varepsilon } w=wηi=1t(E(i))2+ εE(t)

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。