加载中...

深度学习

对损失求平均是为了让梯度值不至于过大
batchsize小挺好的 过大就难收敛了 理论上不会导致影响结果
网络参数更新的梯度 是所有样本的梯度求和取平均值
随机梯度是采样随机 不是批量大小随机
牛顿法快 但不一定收敛结果好
训练集 验证集 测试集(只用一次)

超参数是自己设置的 而不是训练的
权重衰退 处理过拟合 通过限制参数值的选呢范围来控制模型容量 柔性限制 硬性限制
正则化 加上一个w限制 使得wi w越小,对x变化约不敏感,即曲线约平滑。 平滑的模型对噪声不敏感 那么大越大

print( net[2].state_dict()) //可以将拿出来

nn.init 有大量初始化函数

每一层的参数 如果只有一个神经元为初始值相等 那么就相当于她们的值是同个
共享参数 传入的时候使用同一个就行

将模型参数存下来 torch.save(net.state_dict(),'mlp.params')
读取参数
clone = MLP()
clone.load_state_dict(torch.load('mlp.params'))
clone.eval;

批量维,通道维,长,宽

reshape自动选择要不要改变内存存储方式,而view不能改变

signmoid 变成了 relu 可以减缓梯度消失

最重要的问题是会带来过拟合
假设使用卷积层的话,参数的个数等于输入的通道数(Ci) * 输出的通道数(Co) * 卷积窗口的高度(k) * 卷积窗口的宽度(k),但是如果使用全连接层的话,它的参数个数就等于整个输入的像素(也就是输入通道数) * 输入的高 * 输入的宽 * 输出中所有的像素(也就是输出通道数)

参数过多
很容易过拟合(某一层的参数过多很容易导致模型收敛特别快,反过来讲,就需要使用大量的正则化避免该层学到所有的东西)

在每个像素的通道上分别使用多层感知机,也就是在每个像素位置(针对每个高度和宽度)应用一个全连接层。这样将权重连接到了每个空间位置,可以将其视为1 * 1的卷积层,或者看作在每个像素位置上独立作用的全连接层,从另一个角度讲,就是将空间维度中的每个像素视为单个样本,将通道维度视为不同特征

1*1卷积层 等价于 全连接层
NiN块由一个卷积层和两个全连接层(实际上是窗口大小为1 * 1、步幅为1、无填充的卷积层)组成(因为1 * 1的卷积层等价于全连接层,所以这里使用的是1 * 1的卷积层;步幅为1,无填充,所以卷积层输出的形状和输入的形状是一样的,也就是不会改变输入的形状,同时也不会改变通道数)
NiN块中两个1 * 1的卷积层其实是起到了全连接层的作用,这两个卷积层充当了带有ReLu激活函数的逐像素全连接层
对于每个输入的每个像素的权重都是一样的,不会根据输入的具体情况发生变化,所以可以认为是按照输入的每个像素逐一做全连接
交替使用NiN块和步幅为2的最大池化层(最大池化层的作用的就是高宽减半),逐步减小高宽(输出的尺寸)和增大通道数
最后使用全局平均池化层得到输出(全局平均池化层:该池化层的高宽等于输入的高宽,等价于对每一个通道取平均值(这里应该是取平均值吧,视频中沐神说的是最大值,应该是口误吧),作为这个类别的预测,再通过softmax就能得到每个类别的概率了)

NIN 没有参数可学
in

3*3 -> 1 * 3 + 3 *1 减少计算量

flatten 把四维变成二维 因为全连接必须是二维的东西

全连接和一维卷积类似,不过区别在于,一维卷积是单个像素位置的全部通道进行线性加权,而全连接是先把所有输入平铺 (或者用池化层)成一维向量,即更偏向于对像素级别的线性加权。

BN层 输入输出限制 让梯度变大 更新的变高

resnet 学习的层数变多 效果不会变差。。通过在原来基础上 进行提升
加入快通道

更新门 关注
重置门 遗忘
束搜索 进行动态规划

深度循环神经网络:比循环神经网络更深点 获得更多的非线性
双向循环神经网络:做语法填空这样 根据过去和未来的数据 进行差距
两个隐层 合并两个隐藏状态

编码器 需要编码输入
解码器 需要初始化状态(由编码得到) 解码输入

seq to seq
编码器RNN读取输入句子 可以双向
解码器用另外一个RNN输出
训练的时候 没次输出的时候的输入会使用上次的输出 所以翻译很长的时候不会一直错
bleu 预测n-gram 的精度

束搜索:第k层 在kn个选项里面选出最好的k个 变成一个个串

注意力机制:
随意线索被称为查询 query
每个输入是 一个 值+不随意线索 的对
参数化的注意力机制
注意力根绝解码器RNN的输出匹配到合适的RNN输出信息

posted @ 2022-08-23 21:57  liang302  阅读(51)  评论(0编辑  收藏  举报