本文参阅
Datawhale:水很深的深度学习
深度学习(四)-前馈神经网络_未名湖畔的落叶-CSDN博客_前馈神经网络
神经元模型
在前馈神经网络中,各神经元别离属于不同的层。每一层的神经元可以接纳前一层神经元的信号,并产生信号输出到下一层。第 0 层叫输入层,最后一层叫输出层,其它中间层叫做隐藏层,相邻两层的神经元之间为全衔接关系,也称为全衔接神经网络(F N N FNNFNN),表现方法如下图所示。
咱们用下面的记号来描述一个前馈神经网络:
神经网络的开展历程
神经元(M-P)
1943 年,美国神经生理学家沃伦麦卡洛克( Warren McCulloch ) 和数学家沃尔特 皮茨(Walter Pitts )对生物神经元进行建模,初次提出了一种方法神经元模型,并命名为McCulloch-Pitts模型,即后 来广为人知的M-P模型。
在M-P模型中,神经元接受其他n个神经元的输入信号(0或1),这些输入信号经过权重加权并求和,将求和结果与阈值(threshold)比较,然后经过激活函数处理,得到神经元的输出。
y=f\left(\sum_{i=1}^{n} \omega_{i j} x_{i}-\theta\right)y=f(i=1∑nijxi−)
M-P 模型可以表明多种逻辑运算,如取反运算、逻辑或、逻辑与。
- 取反运算可以用单输入单输出模型表明,即如果输入为0则输出1,如果输入为1则输出0。由M-P模型的运算规则可得w = -2, = -1w=−2,=−1.
- 逻辑或与逻辑与运算可以用双输入单输出模型表明。以逻辑与运算为例,w_1=1,w_2=1, =1.5w1=1,w2=1,=1.5.
网络结构
人工神经网络由神经元模型构成,这种由许多神经元组成的信息处理网络具有并行散布结构。
其间圆形节点表明一个神经元,方形节点表明一组神经元。
感知器
单层感知器
1958 年,罗森布拉特( Roseblatt )提出了感知器,与 M-P 模型需 要人为确认参数不同,感知器可以经过练习主动确认参数。练习方法为有监督学习,即需求设定练习样本和希望输出,然后调整实践输出和希望输出之差的方法(差错批改学习)。
\begin{aligned} w_{i} & \leftarrow w_{i}+\alpha(r-y) x \\ \theta & \leftarrow \theta-\alpha(r-y) \end{aligned}wi←wi+(r−y)x←−(r−y)
其间,\alpha是学习率,rr和yy别离是希望输出和实践输出。
感知器权重调整的基本思路:
- 实践输出 y 与希望输出 r 相等时,w 和 不变
- 实践输出 y 与希望输出 r 不相等时,调整 w 和 的值
\begin{aligned} w_{i} & \leftarrow w_{i}+\alpha(r-y) x \\ \theta & \leftarrow \theta-\alpha(r-y) \end{aligned}wi←wi+(r−y)x←−(r−y)
下面给出感知器模型的练习进程
多层感知器
单层感知器只能处理线性可分问题,而不能处理线性不行分问题;为了处理线性不行分问题,咱们需求运用多层感知器。
多层感知器指的是由多层结构的感知器递阶组成的输入值向前传达的网络,也被称为前馈网络或正向传达网络。
以三层结构的多层感知器为例,它由输入层、中间层及输出层组成
- 与M-P模型相同,中间层的感知器经过权重与输入层的各单元相衔接,经过阈值函数核算中间层各单元的输出值
- 中间层与输出层之间同样是经过权重相衔接
BP算法
多层感知器的练习运用差错反向传达算法(Error Back Propagation),即BP算法。BP算法最早有沃博斯于1974年提出,鲁梅尔哈特等人进一步开展了该理论。
BP算法的基本进程
- 前向传达核算:由输入层经过隐含层向输出层的核算网络输出
- 差错反向逐层传递:网络的希望输出与实践输出之差的差错信号由输出层经过隐含层逐层向输入层传递
- 由“前向传达核算”与“差错反向逐层传递”的反复进行的网络练习 进程
BP算法便是经过比较实践输出和希望输出得到差错信号,把差错信 号从输出层逐层向前传达得到各层的差错信号,再经过调整各层的衔接权重以减小差错。权重的调整主要运用梯度下降法:
\Delta w = -\alpha \frac{\partial E}{\partial w}w=−∂w∂E
激活函数
经过差错反向传达算法调整多层感知器的衔接权重时,一个瓶颈问题便是激活函数:
- M-P 模型中运用阶跃函数作为激活函数,只能输出 0或 1,不连续所以 不行导
- 为了使差错可以传达,鲁梅尔哈特等人提出运用可导函数Sigmoid作为激活函数
Sigmoid函数的导数:\frac{df(u)}{du} = f(u)(1-f(u))dudf(u)=f(u)(1−f(u))
其他常见的激活函数:ReLU (Rectified Linear Unit,批改线性单元)和tanh等
BP算法示例
以包含一个中间层和一个输出单元yy的多层感知器为例:w_{1ij}w1ij表明输 入层与中间层之间的衔接权重,w_{2j1}w2j1表明中间层与输出层之间的衔接权重,ii表明输入层单元,jj表明中间层单元。
- 首先调整中间层与输出层之间的衔接权重,其间y=f(u)y=f(u),ff是激活函数,u_{21} = \sum_{j = 1}^{m}w_{2j1}z_ju21=∑j=1mw2j1zj,把差错函数 E 对衔接权重w_{2j1}w2j1的求导展开成复合函数求导:
\begin{array}{c}\frac{\partial E}{\partial w_{2 j 1}} =\frac{\partial E}{\partial y} \frac{\partial y}{\partial u_{21}} \frac{\partial u_{21}}{\partial w_{2 j 1}} \\ =-(r-y) y(1-y) z_{j}\end{array}∂w2j1∂E=∂y∂E∂u21∂y∂w2j1∂u21=−(r−y)y(1−y)zj
这儿z_jzj表明的是中间层的值。
- 第二,中间层到输出层的衔接权重调整值如下所示:
\Delta w_{2 j 1}=\alpha(r-y) y(1-y) z_{j}w2j1=(r−y)y(1−y)zj
- 第三,调整输入层与中间层之间的衔接权重
\begin{aligned} \frac{\partial E}{\partial w_{1 i j}} &=\frac{\partial E}{\partial y} \frac{\partial y}{\partial u_{21}} \frac{\partial u_{21}}{\partial w_{1 i j}} \\ &=-(r-y) y(1-y) \frac{\partial u_{21}}{\partial w_{1 i j}} \end{aligned}∂w1ij∂E=∂y∂E∂u21∂y∂w1ij∂u21=−(r−y)y(1−y)∂w1ij∂u21
中间层到输出层
输入层到中间层
优化问题
难点
- 参数过多,影响练习
- 非凸优化问题:即存在局部最优而非大局最优解,影响迭代
- 梯度消失问题,下层参数比较难调
- 参数解释起来比较困难
需求
- 核算资源要大
- 数据要多
- 算法功率要好:即收敛快
非凸优化问题
梯度消失问题
总结:
本文便是简略学习了神经网络的开展流程,从单层感知机(单层神经元)到多层感知机,从只能处理线性问题到可以处理越来越复杂的非线性问题,从人工设置参数到差错批改主动学习参数,更有反向传达算法的诞生,为之后的深度神经网络奠定了基础。对于神经网络中的优化问题,是一门比较复杂的学识,需求十分深沉的理论基础,如梯度下降算法、Adam算法等。
参阅:datawhale 11月学习——水很深的深度学习:前馈神经网络_SheltonXiao的博客-CSDN博客