摘要: BP (Backpropagation ) 神经网络是一个万能的函数模拟器.
所有的神经网络, 本质都是特征提取器 – 斯 ⋅ \cdot ⋅沃索地.
1. BP 神经网络的结构
图 1 给出一个四层神经网络.
- 输入层有 3 个端口, 表示数据有 3 个特征;
- 第一个隐藏层有 5 个节点, 表示从 3 个特征提出了 5 个新的特征, 每个新特征都是前一特征的加权和 (线性模型);
- 第二个隐藏层有 4 个节点, 表示从上一层的 5 个特征提出了 4 个新的特征;
- 输出层有 2 个节点, 表示从上一层的 4 个特征提出了 2 个新的特征.
神经网络可以解决各种机器学习问题:
- 假设这里应对的是二分类问题, y 1 y_1 y1 对应于负例, y 2 y_2 y2 对应于正例, 那么, y 1 ≥ y 2 y_1 \ge y_2 y1≥y2 时, 就预测为负例, 否则预测为正例.
- 对于 k k k 个类别的多分类问题, 输出端口数设置为 k k k.
- 对于回归问题, 输出端口设置为 1 1 1.
2. 激活函数
仅仅是线性方案, 也就相当于 机器学习常识 11: logistic 回归 的水平, 肯定不能让 BP 神经网络达到现有的高度. 而且, 仅仅是线性方案, 多层与两层没有区别, 因为三层的
X
W
1
W
2
\mathbf{XW}_1\mathbf{W}_2
XW1W2 可以替换为两层的
X
W
3
\mathbf{XW}_3
XW3, 其中
W
3
=
W
1
W
2
\mathbf{W}_3 = \mathbf{W}_1\mathbf{W}_2
W3=W1W2.
激活函数将加权和变成另一个值, 如
f
(
x
)
=
max
{
0
,
x
}
f(x) = \max\{0, x\}
f(x)=max{0,x}
这种简单到令人发指的函数, 就可以改变线性特点.
于是, 神经网络就变成了万能的函数逼近器, 也就是说, 任意函数都可以用一个神经网络来逼近, 参见 为什么说神经网络可以逼近任意函数.
3. 与 PCA 的联系与区别
联系: 都是进行特征提取.
区别:
- PCA 的特征提取是无监督的, 神经网络一般是有监督的;
- PCA 的特征提取有理论依据, 神经网络的连边使用一些随机的初始权重, 然后不断调整;
- PCA 的特征提取数量有理论依据, 神经网络每层节点数量 (特征数量) 是人为设置的超参数, 连激活函数的选取也是人为的.
4. 深度学习与宽度学习
如果数据集比较小, 特征比较少, 则应该使用较少的层数, 以及较少的节点数.
如果数据集比较大, 特征比较多, 则应该使用较多的层数, 以及较多的节点数. 所以形成了 深度学习. 换言之, 深度学习特别“吃”数据, 数据量小了就别玩, 去搞搞 机器学习常识 12: SVM之类的小样本学习吧.
宽度学习是指隐藏层的节点数非常多, 理论上已经证明, 宽度学习与深度学习是等价的. 我认为原因在于: 由于神经网络初始权重设置的随机性, 宽度学习提取的特征非常多, 总有几个是合适的.
5. 关于调参师
有些人诟病做神经网络 (特别是应用) 就是当网络调参师: 几层,什么激活函数,以及哪些组件 (这个在后面要介绍). 我还是有不同意见. 机器学习需要有洞察力 (insight), 如果基础不牢, 没有机器学习的基本思路, 就像在漆黑的屋子里面找东西一样, 纯碰运气是不气的. 本系列贴子也是希望为读建立一些 insight.