Open zengbin93 opened 6 years ago
神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,能够模拟生物神经系统对真实世界物体所作出的交互反应。 -- Kohonen, 1988
神经网络通常包含输入层、隐含层、输出层。其中,隐含层可以是多层。
神经网络的训练过程本质上是一个参数寻优过程。
神经元是组成神经网络的基本单元,其结构如下:
感知机(Perception)有两层神经元,输入层接收外部输入数据后传递给输出层。
激活函数是神经元模型的重要组成部分,常用的激活函数有:1)Sigmoid函数;2)阶跃函数;3)ReLU;4)Leaky-ReLU等。
根据处理任务的不同,选取一个合适的激活函数非常关键。
阶跃函数非常简单,见下图。它的缺陷是不连续、不光滑,因此,实际操作中很少使用这个作为激活函数。
Sigmoid函数可以把较大范围内变化的输入值挤压到(0, 1)输出值范围。此外,SIgmoid函数的导数非常容易计算,公式如下:
以最简单的双层神经网络为例,其结构图(来自《机器学习(周志华)》图5.7)如下:
BP算法的工作流程:先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差,再将误差逆向传播至隐层神经元,最后根据隐层神经元的误差来对连接权和阈值进行调整。该迭代过程循环进行,直到达到某些停止条件为止。
BP算法的训练目标是最小化训练集上的累计误差。
无监督逐层训练是深度神经网络训练的有效手段,基本思想是:每次训练一层隐节点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入,这称为“预训练”(pre-training);在预训练全部完成后,再对整个网络进行“微调”(fine-tuning)训练,通常是利用BP算法对整个网络进行训练。
learning rate 控制着算法每一轮迭代中的更新步长,若太大则容易振荡,太小则收敛速度又会过慢。通常设置在 [0.001, 0.1] 之间
神经网络的训练时间少则几个小时,多则几天甚至几周,如果训练过程程序死机了,将浪费大量的时间和资源,因此在训练过程中应当每隔一段时间就保存一次模型
训练数据的大幅增加可以降低过拟合风险
从增加模型复杂度的角度来看,增加隐层的数目比增加隐层神经元的个数更有效
权共享 - 让一组神经元使用相同的连接权,从而加快训练速度
解决复杂问题的方法就是抽象,也就是隐藏细节信息。抽象屏蔽掉无用的细节。为了设计一个复杂系统,你必须找出哪些是你想暴露给其他人的,哪些是你想隐藏起来的。暴露给其他人的部分,其他人可以进行设计。暴露的部分就是抽象。深度神经网络中的每层就是数据的抽象表示,层和层之间有依赖关系,最终形成一个层次结构。每一层都是上一层的一个更高级的抽象。给定一组原始数据和要解决的问题,然后定义一个目标函数来评估网络输出的答案,最终神经网络就能通过学习得到一个最优的解。
5.1 - Attention机制
5.2 - Dropout机制
RNN是包含循环的网络,可以看作是同一个神经网络的多次复制,每个神经网络模块会把消息传递给下一个,因此,RNN能够使用之前一定时间内的相关信息。RNN常用于处理序列数据。
LSTM 由Hochreiter & Schmidhuber (1997)提出,并在近期被Alex Graves进行了改良和推广。LSTM(Long Short-Term Memory)是RNN 中一种特殊的类型,可以学习长期依赖信息,它在很多任务上都要表现的比标准RNN更好。
深度学习效果惊人,做点学习笔记在这里。
学习资料: