这部分内容很多没看懂,先这样过去,在实际项目时有新的想法再进行记录。
线性代数
首先是关于范数的概念,到现在仍然不明白范数有啥作用,一种衡量距离的方式。在聚类这种需要评估距离的算法中也许需要,我记得在惩罚项部分,有的是加上L1范数(lasso回归),有的是L2范数(ridge回归)。【以后有新的认识在此处修改!!!】
- 正定矩阵:一个矩阵乘上一个列向量或者行向量都会≥0。DL中使用不多。
- 特征向量:不被矩阵改变方向的向量。
- 矩阵的转置:A.T
- 使用B=A.clone()可以将A复制给B,且会分配一个新内存。
- Hadamard product:两矩阵按元素乘法:A*B
- 使用A.sum(axis=1, keepdims=True): sum函数可以设置求和的维度,如果不设置keepdims那么会少掉一维,将会影响广播的使用。[按哪个维度计算,那么把该维度划掉(若设置keepdims,则该维=1),剩下的就是求和后的维度]
矩阵计算与导数
导数拓展到向量就是梯度
【注意维度的确定!】
可以理解为按照分子的维度,分母的维度要倒过来。
- d<x,w>/dw:向量x与w的内积对w的导数=x的转置。
- 自动求导:在反向求导时要求保存之前的梯度;在深度学习中很少用到向量对向量的求导,一般是对标量的求导【因为loss一般用标量】,为了变成标量会使用求和函数
z.sum()
sum函数的导数为全一的向量。
x = torch.arange(4.0, requires_grad=True)
x.grad #取导数
y = 2 * torch.dot(x, x)
y.backward() #反向传播自动计算y关于x每个分量的梯度
x.grad
x.grad.zero_() #pytorch默认会累积梯度,所以在进行下一次计算时需要清除之前的值,下划线表示写入全0
- torch是隐式构造计算梯度,比TensorFlow这种显示的,控制要好一些,但计算要慢一些。