Artificial Neural Networks, ANN
ANN是受构成动物大脑的生物神经网络模糊启发的计算系统。本文简单介绍一下ANN,详细的内容会在后面写深度学习的时候再说。
ANN可用于:
- 分类(多层感知器) -
- 模式识别(多层感知器、延时神经网络和递归网络等)
- 回归/函数逼近(前馈架构)
- 聚类(自组织地图网络)
- 模式关联
- 控制
- 过滤时间序列数据
实现ANN的方法有:
- 自组织地图网络
- 径向基函数
- 单/多层感知器
- Hopfield 网络
- 前向/反向传播
- 深度学习结构
- 支持向量机
- 延时神经网络
- 循环网络
上图是一个单层的神经网络。
每个节点都会先计算所有输入的加权和,其中包括一个bias项。
在此之后,会应用一个激活函数(Activation Function)到得到的加权和上面,由此得到输出。
激活函数 \phi(v_k)
Threshold Function
\phi(v) = \begin{cases}1\quad \text {if \textcolor{orange}{$v \geqslant 0$}} \\
0\quad \text{if \textcolor{orange}{$v < 0$}}
\end{cases}
这个激活函数不可微,因此不能用于梯度下降。
Piecewise-Linear Function
\phi(v) = \begin{cases}1\quad \text {if \textcolor{orange}{$v \geqslant +\frac {1}{2}$}} \\
v\quad \text{if \textcolor{orange}{$-\frac{1}{2} < v <+ \frac{1}{2}$}}\\
0 \quad\text{if \textcolor{orange}{$v \leqslant -\frac{1}{2}$}}
\end{cases}
Sigmoid
\phi(v) = \frac {1}{1+exp(-av)}
通过改变参数a,可以得到不同斜率的sigmoid函数,输出范围在0和1之间。
纠错学习
e_k(n) = d_k(n) - y_k(n)
e_k(n) 可以作为一个反馈来修正输入的weight:
回归:\Delta w_{kj}(n) = \eta e_k(n)
分类:\Delta w_{kj}(n) = \eta e_k(n)x_j(n)
此处 \eta 是一个正常数,代表着学习率。对一个神经元的突触权重所做的调整与误差信号和有关突触的输入信号的乘积成正比。
对于学习率的选择,如果 \eta 太大,它可能不会收敛,如果太小,它将需要很长的时间才能达到最小值。
通过使用这种方法,我们能够进行纠正性调整,以使输出信号逐步接近预期响应。这一目标是通过最小化cost function:
\epsilon(n) = \frac{1}{2}e^2_k(n)
随着时间的推移,我们要做的是使我们训练数据集中的所有训练数据项的 cost function 最小化。此外,系统将达到一个稳定的状态,突触权重将变得稳定。
多层神经网络
之前提到的单层ANN对简单的问题(回归和一些二元分类)来说效果不错,但是对于更复杂的问题来说,需要更复杂的网络。
反向传播
写深度学习的时候细嗦