神经网络详细解释(包含BP算法的推导)

本文详细介绍了神经网络的基础,包括单层神经网络结构、激活函数的作用,以及反向传播(BP算法)的推导。重点讨论了激活函数的选择及其重要性,以及在多层神经网络中隐含层的作用。通过举例展示了逻辑回归与单层神经网络的关系,并讲解了交叉熵损失函数。最后,提到了循环神经网络(RNN)、梯度消失与梯度爆炸问题,以及LSTM和GRU在解决这些问题上的改进。
摘要由CSDN通过智能技术生成


神经网络是在人工智能界是比较流行的一种模型。发展到今日已经有很多变种,想cnn,rnn,LSTM,对抗神经网络,等等很多网络结构,网上也有很多比较详细的解释,最近系统的学习了一下神经网络,包括网络结构细节,激活函数,正向传播,反向传播的推导,梯度的计算,过拟合的解决方式等等,想要系统的学习神经网络的同学看过来吧。嘿嘿!

单层神经网络结构

先从最简单的开始理解神经网络,如图(1),这是一个最简单的神经网络结构
在这里插入图片描述
输入为:x1,x2,….xn。每个输入都对应一个权重w,那么将数据集x输入到神经元里面会有什么操作呢?如图(2)
在这里插入图片描述
数据X输入到神经元后会经过两个操作:“a(x)”,和”h(x)” 后才能输出到下一个神经元中。我们也把a(x)称为pre-activation,h(x)称为post-activation,也就是第一步和第二步的意思。我们先看第一步a(x),a(x)是指对利用权重对数据进行一次线性转换,如公式(1)
在这里插入图片描述
简单来说就是将输入集<x1,x2,…xn>乘以对应权重<w1,w2…wn>加上一个偏置。
第二步h(x)是指的对a(x)进行一次非线性的转换,如公式(2)
在这里插入图片描述
g(x)指的是激活函数,也就是对数据进行非线性转换的函数。如tanh,sigmold,relu等

那么问题来了,为什么要进行非线性的转换?

假设我们去掉h(x)这一步,每个神经元只经过a(x)也就是只有线性转换,那么我们的数据从第一个神经元到下一个神经元的过程就是 a 1 ( a ( x ) ) = w 1 T ( a ( x ) ) + b 1 a_{1}\left( a\left( x\right) \right) =w^{T}_{1}\left( a\left( x\right) \right) +b_{1} a1(a(x))=w1T(a(x))+b1再到下一个神经元为: a 2 ( a 1 ( a ( x ) ) ) = W 2 T a 1 ( a ( x ) ) + b 2 a_{2}\left(a_{1}\left( a\left( x\right) \right) \right )=W^{T}_{2}a_{1}\left( a\left( x\right) \right) +b_{2} a2(a1(a(x)))=W2Ta1(a(x))+b2

假定到此结束准备输出,我们展开公式:
a 2 ( a 1 ( a ( x ) ) ) = W 2 T a 1 ( a ( x ) ) + b 2 = W 2 T ( W 1 T a ( x ) + b 1 ) + b 2 = W 2 T ( W 1 T ( W T X + b ) + b 1 ) + b 2 = W 2 T W 1 T W T X + W 2 T W 1 T b + W 2 T b 1 + b 2 a_{2}\left(a_{1}\left( a\left( x\right) \right) \right )=W^{T}_{2}a_{1}\left( a\left( x\right) \right) +b_{2}=W^{T}_{2}\left( W^{T}_{1}a\left( x\right) +b_{1}\right) +b_{2}=W^{T}_{2}\left( W^{T}_{1}\left(W^{T}X+b\right) +b_{1}\right) +b_{2}=W^{T}_{2}W^{T}_{1}W^{T}X+W^{T}_{2}W^{T}_{1}b+W^{T}_{2}b_{1}+b_{2} a2(a1(a(x)))=W2Ta1(a(x))+b2=W2T(W1Ta(x)+b1)+b2=W2T(W1T(WTX+b)+b1)+b2=W2TW1TWTX+W2TW1Tb+W2Tb1+b2

由于W和b是常数,因此 W 2 T W 1 T W T X W^{T}_{2}W^{T}_{1}W^{T}X W2TW1TWTX可以写成 W c T X W^{T}_{c}X WcTX,还有 W 2 T W 1 T b + W 2 T b 1 + b 2 W^{T}_{2}W^{T}_{1}b+W^{T}_{2}b_{1}+b_{2} W2TW1Tb+W2Tb1+b2可以写成 b c b_{c} bc这样公式就可以写成:
a 2 ( a 1 ( a ( x ) ) ) = W c T X + b c a_{2}\left(a_{1}\left( a\left( x\right) \right) \right )=W^{T}_{c}X +b_{c} a2(a1(a(x)))=WcTX+bc

这样大家就会发现我们加这么多层神经元是没有意义的,最后还是变成一层的样子,所以我们在a(x)后加了非线性转换h(x)这样保证每层都是有意义的。因此激活函数比较的选择也是比较重要的

有意思的现象

如图(3)当单层神经网络,只有一个神经元并且激活函数是sigmold时,是此时 a ( x ) = W T X + b a(x) =W^{T}X+b a(x)=WTX+b
g ( x ) = 1 1 + e − x g\left( x\right) =\dfrac {1}{1+e^{-x}} g(x)=1+ex1
那么此时:
输 出 = h ( x ) = g ( w T x + b ) = 1 1 + e − ( w T x + b ) 输出=h\left( x\right)=g\left( w^{T}x+b\right)=\dfrac {1}{1+e^{-(w^{T}x+b)}} =h(x)=g(wTx+b)=1+e(wTx+b)1

而逻辑回归为:
p ( y ∣ x ) = 1 1 + e − ( w T x + b ) p(y|x)=\dfrac {1}{1+e^{-(w^{T}x+b)}} p(yx)=1+e(wTx+b)1

所以说逻辑回归是神经网络的一个特例
在这里插入图片描述

常见的激活函数:

Linear activation(线性激活函数)

在这里插入图片描述
公式: g ( a ) = a g\left( a\right) =a g(a)=a

直接输出,没有任何意义,没有边界,输出多层相当于一层
Sigmold函数:
在这里插入图片描述
公式: g ( a ) = 1 1 + e − a g\left( a\right) =\dfrac {1}{1+e^{-a}} g(a)=1+ea1

将输入映射到(0,1)之间 严格递增的函数

Tanh函数::
在这里插入图片描述
公式: y ( a ) = tanh ⁡ ( a ) = e a − e − a e a + e − a y\left( a\right) =\tanh \left( a\right) =\dfrac {e^{a}-e^{-a}}{e^{a}+e^{-a}} y(a)=tanh(a)=ea+eaeaea

将输入映射到(1,-1)之间 严格递增的函数

Relu:
公式: g ( a ) = R e L u ( a ) = max ⁡ ( 0 , a ) g\left( a\right) =ReLu\left( a\right) =\max \left( 0,a\right) g(a)=ReLu(a)=max(0,a)

当a小于0时强制转换为0,严格递增的函数 无上限

隐含层的神经网络结构

上面讲的是只有一层直接输出的单层神经网络,下面说一下带有隐含层的神经网络,如图(4)
在这里插入图片描述
图(4)隐含层的网络结构
每一节点的细节都可以表示成图(5)
在这里插入图片描述

a ( x ) ( i ) a\left( x\right)^{(i)} a(x)(i)表示第 i i i层神经元的pre-activation

a ( x ) ( i ) = < a ( x 1 ) ( i ) , a ( x 2 ) ( i ) , a ( x 3 ) ( i ) . . . a ( x n ) ( i ) > a\left( x\right)^{(i)}=<a\left( x_1\right)^{(i)},a\left( x_2\right)^{(i)},a\left( x_3\right)^{(i)}...a\left( x_n\right)^{(i)}> a(x)(i)=<a(x1)(i),a(x2)(i),a(x3)(i)...a(xn)(i)>

h ( x ) ( i ) h\left( x\right)^{(i)} h(x)(i)表示第 j j j层神经元的post-activation

h ( x ) ( i ) = < h ( x 1 ) ( i ) , h ( x 2 ) ( i ) , h ( x 3 ) ( i ) . . . h ( x n ) ( i ) > h\left( x\right)^{(i)}=<h\left( x_1\right)^{(i)},h\left( x_2\right)^{(i)},h\left( x_3\right)^{(i)}...h\left( x_n\right)^{(i)}> h(x)(i)=<h(x1)(i),h(x2)(i),h(x3)(i)...h(xn)(i)>

W ( i ) W^{(i)} W(i)表示第 j j j层神经元的权重

W ( i ) = < w 1 ( i ) , w 2 ( i ) , w 3 ( i ) , w 4 ( i ) . . . , w n ( i ) , > W^{(i)}=<w^{(i)}_1,w^{(i)}_2,w^{(i)}_3,w^{(i)}_4... ,w^{(i)}_n,> W(i)=<w1(i),w2(i),w3(i),w4(i)...,wn(i),>

第一层可以表示成:

a ( x ) ( 1 ) = W ( 1 ) T X + b ( 1 ) a\left( x\right) ^{\left( 1\right) }=W^{\left( 1\right) ^{T}}X+b^{(1)} a(x)(1)=W(1)TX+b(1)

h ( x ) ( 1 ) = g ( a ( x ) ( 1 ) ) h\left( x\right)^{(1)}=g(a\left( x\right) ^{\left( 1\right) }) h(x)(1)=g(a(x)(1))

由第一层输入到第二层可以表示成:

a ( x ) ( 2 ) = W ( 1 ) T h ( x ) ( 2 ) + b ( 2 ) a\left( x\right) ^{\left( 2\right) }=W^{\left( 1\right) ^{T}}h\left( x\right)^{(2)}+b^{(2)} a(x)(2)=W(1)Th(x)(2)+b(2)

h ( x ) ( 2 ) = g ( a ( x ) ( 2 ) ) h\left( x\right)^{(2)}=g(a\left( x\right) ^{\left( 2\right) }) h(x)(2)=g(a(x)(2))

因此第k层可以表示成:

a ( x ) ( k ) = W k h ( x ) k − 1 + b ( k ) a\left( x\right) ^{\left( k\right) }=W^{k}h(x)^{k-1}+b^{(k)} a(x)(k)=Wkh(x)k1+b(k)

h ( x ) ( k ) = g ( a ( x ) ( k ) ) h\left( x\right)^{(k)}=g(a\left( x\right) ^{\left( k\right) }) h(x)(k)=g(a(x)(k))

输出层的激活函数一般设置为softmax也就是 g ( x ) = σ ( x ) g\left( x\right)=\sigma (x) g(x)=σ(x)若在第l层输出

a ( x ) ( l ) = W l h ( x ) l − 1 + b ( l ) a\left( x\right) ^{\left( l\right) }=W^{l}h(x)^{l-1}+b^{(l)} a(x)(l)=Wlh(x)l1+b(l)

h ( x ) ( l ) = g ( a ( x ) ( l ) ) = σ ( a ( x ) ( l ) ) h\left( x\right)^{(l)}=g(a\left( x\right) ^{\left( l\right) })=\sigma(a\left( x\right) ^{\left( l\right) }) h(x)(l)=g(a(x)(l))=σ(a(x)(l))

通常为了区分最后一层的激活函数与其他层不同,我们也常常设置 f ( x ) = h ( x ) ( l ) f(x)=h\left( x\right)^{(l)} f(x)=h(x)(l)

根据上面的步骤一直计算,直到最后一层输出 f ( x ) f(x) f(x)也就是完成了神经网络的正向传播

反向传播

假设数据标签为 y y y下一步我们要计算 y y y f ( x ) f(x) f(x)之间的差距,差距越小说明我们的模型越优秀,所以反向传播的目的就是不断减小 y y y f ( x ) f(x) f(x)之间的差距。所以神经网络的目标函数为公式:
a r g m i n : 1 T ∑ ∗ φ ( f ( x ( t ) ; θ ) , y ( t ) ) + λ Ω ( θ ) argmin:\dfrac {1}{T}\sum _{\ast }\varphi( f\left( x^{(t)};{\theta }\right) ,y^{(t)})+\lambda \Omega\left( \theta \right) argmin:T1φ(f(x(t);θ),y(t))+λΩ(θ)
θ \theta θ表示神经网络的所以参数:

θ = { ( W ( i ) , b ( i ) ) i = 1 l + 1 } \theta =\left\{ (W^{(i)},b^{(i)}) ^{l+1}_{i=1}\right\} θ={ (W(i),b(i))i=1l+1}

f ( x ( t ) ; θ ) f\left( x^{(t)};{\theta }\right) f(x(t);θ)表示t时刻参数为 θ \theta θ时模型的输出

y ( t ) y^{(t)} y(t)表示t时刻的数据集标签

λ Ω ( θ ) \lambda \Omega\left( \theta \right) λΩ(θ)表示限制参数的正则

φ ( x , y ) \varphi( x,y) φ(x,y)表示损失函数,也就是技术 x 和 y x和y xy的差异,常见的有交叉熵函数

目标函数可以转换成:
a r g m a x : − 1 T ∑ ∗ φ ( f ( x ( t ) ; θ ) , y ( t ) ) − λ Ω ( θ ) argmax:-\dfrac {1}{T}\sum _{\ast }\varphi( f\left( x^{(t)};{\theta }\right) ,y^{(t)})-\lambda \Omega\left( \theta \right) argmax:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值