1.深度学习基础模型
1.1线性回归模型
公式中xi表示第i个样本的数据,当我们输入X为矩阵[NXD]时,W大小为[DX1],b的大小为[Nx1],这样公式计算出的结果为[NX1],参数W被称为权重(weights)。b被称为偏差向量(bias vector),这是因为它影响输出数值,但是并不和原始数据产生关联。在实际情况中,人们常常混用权重和参数这两个术语。
下面是在学习Pytorch中遇到的的一些库的使用理解
pytorch中数据读取torch.utils.data.DataLoader的使用理解
pytorch中 nn.init 中实现的初始化函数
pytorch中nn.Sequential类
1.2softmax分类模型
Softmax的输出(归一化的分类概率)更加直观,并且从概率上可以解释,在Softmax分类器中,函数映射保持不变,但将这些评分值视为每个分类的未归一化的对数概率,损失函数为交叉熵损失(cross-entropy loss)。
softmax 函数如下:
交叉熵损失函数公式如下:
解决softmax运算的上溢和下溢问题
1.3多层感知机
如果全是线性变换的全连接层,则实际上跟单层网络区别不大,中间需要添加非线性变换函数进行处理。
1.3.1权重初始化问题
1.权重要采用小随机数初始化始话的方式,因为如果网络中的每个神经元权重都一样的话,那么计算出的都是同样的输出,然后它们就会在反向传播中计算出同样的梯度,从而进行同样的参数更新。换句话说,如果权重被初始化为同样的值,神经元之间就失去了不对称性的源头。
警告。并不是小数值一定会得到好的结果。例如,一个神经网络的层中的权重值很小,那么在反向传播的时候就会计算出非常小的梯度(因为梯度与权重值是成比例的)。这就会很大程度上减小反向传播中的“梯度信号”,在深度网络中,就会出现问题。
2.使用1/sqrt(n)校准方差。上面做法存在一个问题,随着输入数据量的增长,随机初始化的神经元的输出数据的分布中的方差也在增大。我们可以除以输入数据量的平方根来调整其数值范围,这样神经元输出的方差就归一化到1了。也就是说,建议将神经元的权重向量初始化为:w = np.random.randn(n) / sqrt(n)。其中n是输入数据的数量。这样就保证了网络中所有神经元起始时有近似同样的输出分布。实践经验证明,这样做可以提高收敛的速度。
3.批量归一化(Batch Normalization)其做法是让激活数据在训练开始前通过一个网络,网络处理数据使其服从标准高斯分布。因为归一化是一个简单可求导的操作,所以上述思路是可行的。在实现层面,应用这个技巧通常意味着全连接层(或者是卷积层,后续会讲)与激活函数之间添加一个BatchNorm层。在神经网络中使用批量归一化已经变得非常常见。在实践中,使用了批量归一化的网络对于不好的初始值有更强的鲁棒性。
4.Xavier, He initialization初始化