Neural networks and deep learning(一本入门级好书)
Michael Nielsen
在线阅读链接:http://neuralnetworksanddeeplearning.com/index.html
中文版链接:https://pan.baidu.com/s/1bo0t7sz 密码: ecvf
代码下载链接:https://pan.baidu.com/s/1c1PuaGC 密码: 4w8n
(以识别手写数字为例)
Part 0 预备知识
0-0 感知器
(接受几个二进制输入,分配权重求和,产生一个二进制输出)
将阈值移到不等式另一边,用感知器的偏置b=-threshold代替。
假如我们有一个感知器,那如果这个网络能学习权重和偏置,就能做出判断啦。
0-1 S型神经元
为了使我们的权重和偏置的微小改动只引起微小变化,我们定义一个S型函数(求偏导就知道为什么可以这样啦;而且事实上还有很多不同的激活函数):
那么此时输出变成:
0-2 一个简单的手写数字分类神经网络结构
注:本文讨论的为前馈神经网络,即上一层输入作为下一层输出。(实际上也有递归神经网络~ )
输入层:由于此网络的输入训练数据为扫描得到的2828的手写数字图像(0,1,2,...,9),因此输入层包含784=2828个神经元。
隐藏层:假设该层第一个神经元用于检测如下图像是否存在:
第二三四个分别检测以下是否存在:
那么若隐藏层的这四个神经元都被激活,则可以判断为0.
输出层:含有10个神经元。
Part 1 使用梯度下降算法学习权重和偏置
定义二次代价函数量化我们的目标:
问题转化成求使C(w,b)最小的w和b。如下图,梯度下降方向则为使C最快减小的方向,eta称为学习速率。
为了加快学习,采用随机梯度下降:通过随机选取小量训练样本计算deltaCx,求平均值即可得到deltaC的估算。
Part 2 反向传播算法计算代价函数的梯度
2-0 一些符号表示
代价函数表示为:
2-1 四个基本方程
2-2 反向传播算法