感知机作为神经网络的起源算法,学习感知机构造
无法使用单层实现,线性——>非线性,使用多层感知机。
通过叠加层,感知机能进行更灵活的表示
单层感知机只能表示线性空间,多层感知机能表示非线性空间
多层感知机在理论上可以表示计算机
设定权重,人工——>自动从数据中学习到合适的权重参数
将感知机用另一种函数表现,h(x)为激活函数,作用在于决定如何激活输入信号的总和
感知机和神经网络的主要区别在于激活函数
感知机中神经元之间流动的是0或1的二元信号,神经网络中流动的是连续的实数值信号;
输入小时,输出接近0;输入大时,输出接近1,输入信号为重要信息时,上述激活函数会输出较大的值,都是非线性函数——激活函数不能使用线性函数,否则各层叠加之后可用单层代替
多维数组运算:A= np.array([1,2,3]) , A.shape , np.ndim(A) , np.dot(A,B)点乘
前向神经网络:输入——>输出
神经网络的运算可以作为矩阵乘法运算打包进行
输出层的激活函数,回归问题中一般用恒等函数,分类问题中一般用softmax函数
输出函数:
a-np.max(a),y不变,防止溢出
softmax函数输出在0到1之间,函数输出值的总和时1,可以把softmax函数输出解释为概率,用 softmax表示分类概率大小顺序和输出值大小顺序相同,可在推理阶段省略softmax()函数
输出神经元的数量一般设定为类别数量
推理处理/前向传播
MNIST数据集,28px×28px,0~255,0~9共10类
读入MNIST数据;读入权重参数;进行推理;评价识别精度
批处理(批,batch):打包式输入,减轻数据总线的负荷,批处理一次性计算大型数组要比分开逐步计算各个小型数组速度更快
np.argmax():获取最大元素的索引——predict对应的最大的数(0~9)
学习:从训练数据中自动获取最优参数的过程——以损失函数为基准,找出能使它的值达到最小的权重参数
数据驱动,数据——模式
机器学习与深度学习: 深度学习/端到端机器学习(end_to_end machine learning)
测试数据、训练数据/监督数据——>测试泛化能力
过拟合(over fitting):只对某个数据集过度拟合的状态
损失函数(loss function):神经网络以某个指标为线索寻找最优权重参数,所用指标为损失函数,可以使用均方误差、交叉熵误差等
one-hot表示:正确解标签表示为1,其他标签表示为0
交叉熵误差的值由正确解标签对应的输出结果决定,正确解标签对应的输出越大,E的值越接近0
机器学习使用训练数据进行学习,就是针对训练数据计算损失函数的值,如果要求所有训练数据的损失函数的总和,则:
np.random.choice()——>索引——>对应mini-batch——>计算损失函数
如果是标签形式的y:-np.sum(np.log(y[np.arange(batch_size),t]+1e-7))/batch_size
寻找最优参数(权重、偏置)时,要寻找使损失函数的值尽可能小的参数,在进行神经网络学习时,不能将识别精度作为指标,如果以识别精度为指标,参数的倒数在绝大多是地方会变成0,导致参数无法更新
阶跃函数导致损失函数的值不会发生变化,sigmoid函数的导数在任何地方都不为0
h过小:会出现舍入误差 ;差分:不能完全替代导数(解析性导数)
偏导数:将多个变量中的某一个变量定为目标变量
梯度(gradient):由全部变量的偏导数汇总而成的向量
梯度指向各点处的函数值降低的方向,即函数值减小最多的方向
学习时寻找最优参数——损失函数取最小值时的参数(使用梯度寻找,减小值最多≠指向最小值)
鞍点(saddle point):函数极小值、最小值,梯度为0
寻找最小值:梯度下降法;寻找最大值:梯度上升法
学习率需要事先确定,影响最终结果,神经网络学习中一般会一边改变学习率一边确定学习是否正确进行,学习率过大——发散成一个很大的数,学习率过小——基本不更新;学习率,超参数,尝试多个值以便找到一种可以使学习顺利进行的设定
损失函数关于权重参数的梯度
simpleNet类:predict,loss(predict、softmax输出函数、cross_entropy_error交叉熵误差计算损失函数)
神经网络学习步骤:数据选择——>计算梯度——>更新权重——>……(随机梯度下降法)
如何设置权重参数的初始值时关系到神经网络能否学习成功的重要问题,np.random.randn()使用符合高斯分布的随机数进行初始化
通过反复学习可以使损失函数的值逐渐减小
确认是否能正确识别训练数据以外的其他数据,确认是否会发生过拟合(泛化能力)
训练精度和测试精度基本没有差异,没有过拟合现象
误差反向传播算法能高效计算权重参数的梯度,基于数学式和计算图进行理解
从左到右计算:正向传播——从右到左反向传播
计算图可以集中精力于局部计算,通过局部计算使各节点致力于简单计算,简化问题
下游<——上游
加法:将上游值原封不动输出到下游
乘法:反向传播会乘以输入信号的翻转值
add_apple_orange_layer = AddLayer()
X和∂L/∂X形状相同,Y和∂L/∂Y形状相同
N个数据进行正向传播,X形状(N,2)
np.sum(dY,axis=0) class Affine:
推理阶段不用Softmax,学习阶段用Softmax
神经网络的反向传播会把差分表示的误差传递给前面的层,需要把神经网络的输出和标签的误差高效传递给前面的层
组装已实现的层构建神经网络
mini-batch——>计算梯度——>更新参数——>重复
数值微分被误差反向传播方法取代,数值微分被用来确认反向传播法的实现是否正确,即梯度确认(gradient check)
使用误差反向传播法的学习:
SGD在某些情况效率低,根本原因是梯度方向没有指向最小值的方向
学习率衰减:对着学习的及逆行,使学习率逐渐减小
Momentum+AdaGrad,进行超参数的偏差校正
超参数:学习率、一次momentum系数、二次momentum系数
实验结果会随学习率等超参数、神经网络的结构的不同发生变化,一般与SGD相比,Momentum、Adam、AdaGrad可以学习得更快,有时最终识别精度也更高
防止权重均一化,必须随机生成初始值
权值衰减:以减小权重参数的值为目的进行学习,通过减小权重参数的值抑制过拟合的发生
梯度消失:偏向0和1的数据分布会造成反向传播中梯度值不断变小,最后消失
标准差为1的高斯分布、标准差0.01的高斯分布、Xavier初始值:
ReLU激活函数 He初始值:np.sqrt(2/n)
sigmoid、tanh等S型曲线函数 Xavier初始值:np.sqrt(1/n)
1、整体结构
2、卷积层
3、池化层
4、卷积层和池化层的实现
5、CNN的实现
6、CNN的可视化
7、具有代表性的CNN
(1)LeNet
(2)AlexNet
1、加深网络
2、深度学习进展
3、深度学习的高速化
4、深度学习应用案例
5、深度学习前景