目录
1. 神经网络的几个名词
1.1 神经元——最小的神经网络
1.2 二分类逻辑回归模型
神经元——激活函数sigmoid——二分类逻辑斯蒂回归模型
代码详见:https://github.com/crystal30/Deep-learning
cifar-10-batches-py 为数据集
data_introduction.ipytnb 主要是对数据集的查看
neuron_two_class.ipynb 二分类斯蒂回归模型
1.3 多分类逻辑回归模型
神经元——多输出
(1)W从向量扩展为矩阵,输出W*X则变成向量。
(2)多输出神经元——softmax——多分类逻辑斯蒂回归模型
一个输出:
多个输出:
同eg1中:
注:1个神经元(即1个输出)可以分两类,2个神经元(2个输出)可以分三类,n个是神经元(n个输出)可以分为n+1类。
(3) 目标函数
* 衡量对数据的拟合程度
eg2: 单类的例子
(x1, y1) = ([10, 3, 9, 20, ……4], 1)
y1’= Model(x1) = 0.8
Loss = y1 – yi’= 0.2
eg3: 多类的例子
(x1, y1) = ([10, 3, 9, 20, …… 4], 3)
y1’= [0.1, 0.2, 0.25, 0.4, 0.05]
Note: 此处将3通过onehot编码,变为[0,0,0,1,0].
Loss = abs( y-y1’)= abs([0, 0, 0, 1, 0] – [0.1, 0.2, 0.25, 0.4, 0.05])
= abs([0.1, 0.2, 0.25, 0.6, 0.05]) = 1.2
一般的,我们用“平方差损失”或“交叉熵损失”作为目标函数
交叉熵函数更适合做多分类的损失函数,因为交叉熵本来就表示分布之间的差距。
(4)神经网络的训练
目标:调整参数使模型在训练集上的损失函数最小
训练方法:梯度下降法
*学习率(步长)的影响:
代码详见:https://github.com/crystal30/Deep-learning
neuron_multi_class.ipython 多分类回归模型
2. 多层神经网络
代码详见:https://github.com/crystal30/Deep-learning
neural_network.ipynb 多层神经网络多分类回归模型
2.1 神经网络正向计算/传播
2.2 神经网络反向传播
损失函数中的w为W(3), x为a21,a22,a23。疑问:为什么损失函数这样写呢?
此时w为W(2), x为a11,a12,a13。
求导的重要概念:链式法则
2.3 神经网络训练的优化
2.3.1 梯度下降法
每次都在整个数据集上计算Loss和剃度
计算量大
可能内存承载不住
剃度方向确定的时候,仍然是每次都走一个单位的步长
速度慢
2.3.2 随机梯度下降法
每次只使用一个样本
2.3.3 Mini-Batch梯度下降法
每次使用小部分数据进行训练
随机梯度下降法和Mini-Batch梯度下降法不足:
局部极值图示如下:
2.3.4 动量梯度下降
动量梯度下降优势:
开始训练时,积累动量,加速训练
局部极值附近震荡时,梯度为0,由于动量,跳出陷阱
梯度改变方向的时候,动量缓解动荡