=XHX 简单的单层感知机
模型:yj=f(∑iwixi−θj),f 为激活函数,w 为权重,x 为输入,θ 为阈值,y 为输出
学习规则:Δwi=η(y−y^)xi,y^ 为当前输出,η 为学习率(一般极小)
算了,自己看西瓜书 P101 5.3 误差逆传播算法 吧
流程
输入:训练集D={(xk,yk)}k=1m,学习率η
过程:
- 在 (0, 1) 范围內随机初始化网络中所有连接权和阈值
- repeat
- for all(xk,yk)∈D do
- 根据当前参数和yj=f(∑iwixi−θj) 计算当前样本输出y^
- 计算输出层神经元梯度项gj=y^jk(1−y^jk)(yjk−y^jk)
- 计算隐藏层神经元梯度项eh=bh(1−bh)∑j=1lwhjgj
- 计算连接权增量Δwhj=ηgjbh 和Δvih=ηehxi;以及阈值增量Δθj=−ηgj 和Δγh=−ηeh
- end for
- until 达到停止调节
输出:连接权与阈值确定的多层前馈神经网络
避免陷入局部极小
- 用多种初值训练网络,取其中误差最小的解
- 使用模拟退火,即在每一步都以一定概率接受比当前解更差的结果。这一概率会逐步减小
- 使用随机梯度下降,即在计算梯度时加入了随机因素,使得陷入局部极小时也可能获得非零梯度
- 遗传算法(什么鬼
模拟退火是 是否接收这个结果的时候加入随机,随机梯度是 计算梯度的时候选取随机的部分样本而非所有样本。随机梯度下降实际上主要用于加快计算
常用结论
学习率η∈(0,1) 控制算法每轮迭代的更新步长,,一般先大后小。
缓解过拟合:
- 早停:启用验证集,当训练集误差降低但测试集误差升高时停止训练
- 正则化:让误差目标函数加上一个用于描述网络复杂度的函数,例如连接权和阈值的平方和,这将使得训练更倾向于较小的连接权和阈值,让输出更光滑
两个相连的全连接层,前者的输入维度与后者的输出维度相同(即看起来好像转了一圈啥也没干),实际上起到了自编码器的作用
代码相关
pytroch中ctx和self的区别
在写 Pytorch 的网络的 Class 时,建议同时写 __init__()
和 forward()
,这样能够连贯地完成网络结构
nn.Sequential
是简单的顺序网络架构,架构在 super().__init__()
中直接定义;nn.Module
是自由度极高的网络架构
nn.Identity
是输入层
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 无风引漩的小站!