深度学习入门(1)
感知机
-
感知机 Preceptron
层数:一层(输入层+输出层 无隐藏层)(层数不算输入层
神经元连接:输入层直接连接输出层
激活函数:仅使用阶跃函数(阶跃函数:以阈值为界,一旦输入超过阈值,就切换输出)
处理问题类型:线性可分问题
w1 w2 :权重 --权重控制每个x的重要程度
b:偏置 --偏置是调整神经元被激活的容易程度的参数
-
多层感知机 MLP
层数:至少两层(输入层+1层及以上隐藏层+输出层)(层数不算输入层
神经元连接:层内无连接,层间全连接(同一层中的神经元之间没有任何连接,相邻两层的神经元之间存在全连接关系)
激活函数:sigmoid relu等非线性激活函数
处理问题类型:非线性可分(图像识别)(感知机通过叠加层可以进行非线性的表示)
神经网络
-
神经网络:多层感知机
-
激活函数
回归上面感知机的公式,我们令a = b + w1x1 + x2x2,则h(a),当a<=0 h(a)=0;a>0 h(a)=1
h(a) 这个函数就是激活函数 (阶跃函数)
神经网络常使用的激活函数 Activation
-
sigmoid
-
ReLU
-
-
神经网络的前向处理forward:推理处理
计算比较简单:
A = XW + B
A为输出矩阵,X为输入矩阵 W为权重矩阵 B为偏置矩阵
import numpy as np ... ... A = np.dot(X,W)+B
forward:从输入到输出方向的传递处理
-
神经网络 输出层的激活函数
-
回归:对连续数据的预测,用恒等函数
-
分类:对离散数据的预测,用softmax():从下列式子中可以看出输出总和为1
但是如果大数除以大数,会出现溢出情况,输出nan,对策:
加减一个常数,不会改变最后的结果
在推理阶段一般会省略输出层的softmax操作,因为输出值最大的神经元位置不会变化
-
-
批处理 batch
batch_size:一次性打包1batch_size的数据进入神经网络处理
更高效
训练神经网络
-
数据驱动
从数据中学习,可以由数据自动决定权重参数
神经网络(深度学习):没有人为介入,端到端机器学习
-
训练集:监督数据
从训练集中训练模型,提取训练集的特征,与之标签对应,前向传播得到预测结果,反向传播更新参数
- 验证集:有的训练集就是验证集,验证集用来隔一段epoch计算一下当前模型的一些评价指标,监控训练过程,调整超参数
-
测试集
观察模型的泛化能力
-
比例:(常见)
训练集:测试集 = 8:2
训练集:验证集:测试集 = 6:2:2
-
-
损失函数
用来计算预测和真实结果之间的差异,越小越好
下列式子:yk:预测结果;tk:真实结果;k为维度
-
均方误差
-
交叉熵误差
-
mini_batch
随机选择mini_batch的数据进行学习,计算损失函数
-
-
梯度
梯度指示的方向是各点处的函数变化最快的方向,沿梯度反方向,方向导数取得最小值,函数沿该方向下降最快
最优参数是指损失函数取最小值时的参数
可以通过梯度来寻找损失函数最小值(或者更准确的说时极小值)
寻找最小值的梯度法称为梯度下降法
寻找最大值的梯度法称为梯度上升法
但是可以加“-”号来反转问题
-
梯度下降法
梯度前面的参数:学习率learning rate:表示更新参数的程度大小
学习率是超参数(超参数需要人工设定)
下面的公式为什么是负号:当导数的值是负的,代表这个线是在下降的,我们需要向正向方向前进,求极小值;当导数的值是正的,代表这个线是在上升的,我们需要向负向方向前进,求极小值。所以更新的方向都是和导数的正负相反
-
-
神经网络的学习步骤
- mini_batch 批量学习 快速训练
- 计算梯度 grad
- 更新参数
- 重复
因为这里选择的是mini_batch 所以方法称为随机梯度下降方法
-
epoch
1epoch表示整个数据集都被学习过一遍了 相当于进行了all_data_count / batch_size的学习数据