深度学习系统框架基础--python+CNN
机器学习
机器学习是深度学习的前身,机器学习包括学习和推理两个部分,但是学习和推理两部分的内容大部分是相通的,这里整理的很大程度上是这一部分。
python
- 了解外部库,例如Numpy,Matplotlib
- Python的两种运行模式:“解释器“、“脚本文件“
感知机
- 感知机是具有输入于输出的算法。再给定一个输入后,将输出一个既定的值
Figure1:感知机样式
- 感知机的权重Wn和偏置X0设定为参数
神经网络
- 感知机即便是对于非常复杂的函数也能够表示出来。但是设定权重的工作,依然还是人工进行的的;神经网络的一个重要性质是它可以自动地从数据中学习到合适的权重参数。
Figure2:简单的,神经网络包括三层:输入层-中间层-输出层;
输入层(值层):Xn,b参数;
中间层(算层):以前一层的输出作为输入,经过激活函数,输出;
输出层(值层):神经网络的结果;
参数归类
- 权重
- 偏置
- 各层神经元数量
- batch大小
- 参数更新时的学习率
- 权值衰减
激活函数
Figure3:激活函数-神经网络中间层重要的功能——将输入信号的总和转化为输出信号的。
众多激活函数包含阶跃函数、sigmoid函数、非线性函数(必须的,加深网络的意义在于此)、relu函数、恒等函数、softmax函数(往往用于“推理”)
正规化
把数据限定到某个范围的处理
例如:将图像的各个像素值除以255,使得数据的值在0.0~1.0的范围内
预处理
对神经网络的输入数据进行某种既定的转换
批处理
对输入的数据进行使用打包的方式做处理,能够实现高速的运算,以便于训练(学习)
损失函数
神经网络以某个指标为线索寻找最优的权重参数,神经网络中的学习所用的指标即为损失函数
在进行神经网络的学习时,不能将识别精度作为指标。因为如果以识别精度作为指标,则参数的导数在绝大多数地方都会变为0
随机梯度下降法(SGD)
使用参数的梯度,沿着梯度的方向更新参数,并重复这个步骤多次,从而逐渐靠近最优参数,这个过程称为随机梯度下降法
数值微分
“梯度法利用梯度的信息决定前进的方向”
神经网络必须在学习时找到最优的参数(权重和偏置)。
但,这里的最优参数就是需要在损失函数取最小值时的参数。这时需要用大梯度法寻找损失函数的最小值。
式中η称为学习率,学习率决定在一次学习中,应该学习多少,以及在多大程度上更新参数。
误差反向传播法
数值微分较为简单,但是在计算上比较费时间,所以在更一般的情况下,采用一种能够高效计算权重参数的梯度的方法——误差反向传播法。
计算反向传播基础:沿着与正方向相反的方向,乘上局部导数。
其中一个重要的操作:梯度确认——确认数值微分求出的梯度结果和误差反向传播求出的结果是否一致(严格的来讲,两者非常相近)。
Momentum(动量)法
和前面的梯度法不一样的是,加入了变量ν,对应物理上的速度。这种方法有优势是能更快使学习率η的平稳下来。
AdaGrad法
Adam法
权重的初始值
Xavier初始值
Xavier初始值:与前一层有n个节点连接时,使用上图中高斯分布作为初始化。
Relu的权重初始值(He初始值)
当激活函数使用Relu时,一般推荐使用Relu专用的初始值。
Batch Normalization
上面说的权重初始值会使各层的激活值分布有适当的广度:
为了使各层拥有适当的广度,Batch Normalization方法”强制性“的调整激活值的分布。
正则化
作用:抑制过拟合
过拟合
过拟合:只能拟合训练数据,而不能很好的拟合不包含训练数据中的其他数据
权重衰减
通过在学习中对大的权重进行惩罚,来抑制过拟合。
方法:加上权重的L2范数
Dropout
在学习过程中随机删除神经元的方法。
优化超参数
超参数:除权重的偏置等一般基础参数的其他参数。一些已经在参数分类里给出
卷积神经网络
神经网络各个层之间使用卷积单向传播,也可以使用反卷积反转传播
后记
这里是简单写的一个关于神经网络的助记信息,但还是公开,其中大部分都是根据斋藤康毅写的《深度学习入门》内容所整理,由于卷积网络的信息在这本书上体现较少,而且鄙人认为后续的知识复合与其他内容较多,列出来并不能达到对已掌握知识的巩固作用。
当然,懒也是一个重要的原因,?。。。