1.1前言
人脑可以轻易的识别下图的数字3(数字3的字迹虽不同,但它们像素的值是大相径庭的)。
大脑皮层中处理视觉的智能区域能够把不同字迹的数字3图像处理成相同的信息。
同时,还能把其他的图像解释成各自不同的信息。
如何写一个手写数字识别程(输入一个28*28像素的表格,输出一个0到9之间的个位数,判断写的数字是几)?
1.2神经元简介
- 神经元:装有一个0到1之间数字的容器
- 激活值:神经元里装着的数
1.3手写数字识别神经网络
1.3.1多层感知器MPL
- 为了识别数字,使用四层神经网络。
- 输入层包含784=28*28个神经元,输入像素为灰度,值为0.0代表白色,值为1.0代表黑色,两者之间的值代表逐渐变深的灰色阴影。
- 网络的第二、三层为隐含层,此处设置隐含层的神经元个数为16(可变)。
- 网络的输出层包含10个神经元。若第一个神经元触发,即输出~1,表示数字0,以此类推。通过对输出神经元进行编号0-9,并找出哪个神经元具有最高的激活值,以此猜测输入数字。
- 将数字拆分,隐含层神经元表不同的组件,将问题转换成只需要学习哪些组件能组合出哪些数字即可。
- 即,隐含层的神经元会检测简单的数字组件形状,通过对图像重叠的输入像素进行重加权,然后仅对其他输入进行轻度加权来实现此目的。
-数字9图像输入进来,将所有关联短边的神经元点亮,接着点亮顶部圆圈和长竖条的神经元,最后就能点亮对应数字9的神经元。
1.3.2解读单个神经元
设计第二层的某个神经元能够正确识别出图像的这块区域里是否存在一个短边(数字组件)?
- 调节权重值,将第一层的激活值与权重值加权和
- 将正权重值标记为绿色,负权重值标记为红色,颜色越暗,权重值越接近0
- 将关注区域的权重赋为正值,其他权重一律为0,对所有的像素值取加权和,从而累加出关注区域的像素值
- 识别是否存在一个短边,只需将周围一圈的像素赋予负的权重。中间的像素亮,周围的像素暗,加权和达到最大。
- 计算出的加权和为任意大小,但此网络的神经元的激活值在0-1,所以需要通过某个函数将其归一化。 常使用sigmoid的函数。
1.3.4如何设置整个网络数字参数?
- 权重-w:第二层的神经元关注什么样的像素图像
- 偏置-b:(为了防止神经元过早激发)加权和需要多大才能使神经元的激发变得有意义
- 整个网络需要设置近13002=78416+1616+16*10+16+16+10个权重加偏置
- 将第二层的激活值数学表达式转换为矩阵的形式,便于设计程序
- 如何设置13000个参数将使用chapter2的梯度下降算法
Q&A
- 手写数字识别的神经网络结构?
输入了784个代表输入图像各像素的灰度值,该层的激活值的图像让下层的激活值产生某些特殊的图案,以此类推,最终在输出层得到某种结果,而输出层最亮的神经元表示神经网络的“选择“。
- 神经网络处理信息的核心机制?
一层的激活值是通过怎样的运算,算出下一层的激活值
-
为什么要分层?为什么要分两层?
-
上一层如何影响下一层?(上一层的激活值决定下一层的激活值)
-
训练是怎么回事?
-
为什么使用10输出神经元,而不是采用二进制使用4输出神经元?
通过尝试两种网络设计,事实证明,对于这个特定的问题,具有10 输出神经元比4输出神经元的网络更好地识别数字。此外,若以图像分割的方式运行网络,4输出神经网络的第一个输出神经元将试图确定数字的最高效应位无法确定,并且没有简单的方法可以将其关联。
- 什么是神经网络?为什么分层?
- 什么是多层感知器MLP?
- 如何使用神经网络识别手写数字?