其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。
”. . . we may have knowledge of the past and cannot control it; we may control the future but have no knowledge of it.” — Claude Shannon 1959
往者可知然不可谏,来者可追或未可知
上篇介绍了神经网络的理论基石 - 感知机(perceptron)模型;感知机模型是一个简洁的二类分类模型,在中篇里,我们把它推广到多类分类问题,不借助计算框架,构建一个全连接神经网络,再应用于MNIST数据集手写数字识别场景。
MNIST数据集
能正确的提出问题,你已经解决了问题的一半。
这里“正确的问题”是MNIST,一个手写数字图片集数据的识别问题。
你可以在 Yann LeCun的官网下载这套数据集,共四个文件包:
train-images-idx3-ubyte.gz: 训练图片集 (9912422 bytes)
train-labels-idx1-ubyte.gz: 训练图片集的正确标签 (28881 bytes)
t10k-images-idx3-ubyte.gz: 测试图片 (1648877
bytes) t10k-labels-idx1-ubyte.gz: 测试图片的正确标签 (4542 bytes)
每张图片包含一个手写数字。
数据集包含6万张图片用于训练,1万张用于测试验证。
图像数据格式和图向量
每张图片表达了[0,9]这是10个数字中的一个,有28X28=784个像素,每个像素根据灰度取整数值[0,255];把每张图片看作具有784个特征的图向量,问题就变成:根据D个特征维度,对图像做K分类的问题,这里D=784,K=10。
从二分类到多分类问题
一种思路是把 K 类分类问题,视为 K 个二类分类问题:第一次,把样本数据集的某一个类别,和余下的K-1类(合并成一个大类)做二类分类划分,识别出某一类;第 i 次,划分第i类和余下的K-i类;经过 K 次 二类分类迭代,最终完成 K 类分类。
这里,我们选用一种更直接的思路,回忆感知机二类分类模型,只包含了一个输出节点;现在把输出节点扩展为K个 ;权值向量w扩展为 D x K的权值矩阵W,偏置(bias) b扩展为长度为K的数组;这样一来,一个样本点经过模型处理,会得到这个样本点在所有K个类别上的归类可能性得分 z。
z同样是长度为K的数组,某一个元素z [j]的数值越大,输入样本点属于对应分类类别j的可能性也越高。
Softmax
Softmax方法,用于把输出z进一步标准化(normalize),得到某个样本点,归属于各个类别的概率分布;
例如,归属于类别 j 的概率为:
这个结果满足了概率分布的标准化要求:在所有类别上的输出概率都不小0