感知机的模型为:
\[o = \sigma(\langle w,x \rangle + b) \]训练感知机的算法(用 python 伪代码表示):
w, b = 0, 0 while True: for x, y in zip(features, labels): if y * (dot(w, x) + b) <= 0: w, b = w + y * x, b + y if all_classified_correctly: break
等价于使用批量大小为 1 的梯度下降,并使用损失函数:\(l(y, x, w) = \max (0,-y\langle w,x \rangle)\)。
感知机存在收敛定理:在某些条件下能够保证在一定步数之后收敛。
单层感知机不能拟合 XOR 问题(Minsky & Papert, 1969),它只能产生线性分割面。
可能会疑惑为什么不能用二次函数之类的激活函数,以前的查阅找到的大概答案是:因为这超出了原始的单层感知机概念:每个神经元都是线性分类器(其实多层感知机的每个神经元也都是线性分类器)。但是这个答案其实并不能让人满意,这的确是一个问题(留待阅读 Minsky 的 Perceptron 原文再来回答这个问题吧)。
softmax 回归加上一层隐藏层就成为了多层感知机的多类分类。
现在出现了两组超参数:隐藏层数和每层隐藏层的大小。
为什么通常层数是逐层减少的,是认为提取出来的特征(维度)越来越少。
见书上和 jupyter notebook 了。