-
符号学 -> 概率(统计)模型 -> 机器学习 感知 -> 推理 -> 知识 -> 规划
-
亚倒数(偏导数),次导数
梯度简单理解为指向值变化最大的方向
- 情况一: y是标量,x是向量, x=[x1, x2, x3,...xn] (偏导数 -> 列变行)
情况二: y是向量, x 是标量 分子转置了,就是分母布局;分母转置了,就是分子布局。
情况三: y是向量, x是向量 ,结果是矩阵
情况四: X,Y是矩阵,一般X需要转置
3.向量链式法则
4.自动求导的模式
梯度反向传播的时候,耗内存,因为需要存储正向的所有中间结果。
5.线性模型是唯一有最优解的模型。
6.detach()方法不会影响原始张量或其梯度属性。它只是创建了一个新的、与原始张量共享数据但无计算历史的张量。简单来说就是去掉梯度属性。
7.Hebb定律 又名赫步定律,1949年Hebb提出了突触学习的模型,这个模型被称为“Hebb定律”。在神经生物学中,学习定义为人或动物通过神经系统接受外界环境信息而影响自身行为的过程,学习在脑中分子层次发生的过程是神经元突触处连接的变化.
8.如果样本大小不是批量数的整数倍,怎么处理: 1. 修改batch_size设置,使得epoch能迭代完整 2.忽略最后一次的 3.从下一个epoch里面取数据把本次数据补充成完整的一个epoch
9.回归: 单连续数值输出 -> 二分类(逻辑回归实际是分类问题),logistic
softmax分类:多分类,通常多个输出,输出i是预测为第i类的置信度,对分类问题不再关系均方误差,更希望识别正确的置信度大,softmax(),用交叉熵计算损失,
-
损失函数 : 均方误差 平均绝对值误差(L1误差),Huber Loss(Huber损失)是一种用于回归任务的损失函数
-
torch.nn.Flatten(start_dim=1,end_dim=-1)因为其被用在神经网络中,输入为一批数据,第 0 维为batch(输入数据的个数),通常要把一个数据拉成一维,而不是将一批数据拉为一维。所以torch.nn.Flatten()默认从第一维开始平坦化。
-
感知机可以看作是二分类的问题,输出是一个值,分类问题输出多个值,它的求解算法等价与使用批量大小为1的梯度下降,停止条件是所有的都分类正确,感知机是拟合线性关系,线性感知面,但是会有异或XOR问题, 进阶为多层感知机(MLP),多层感知机使用隐藏层和激活函数来得到非线性模型 13.激活函数 : sigmoid函数(0 ~ 1), tanh函数(-1 ~ 1), relu函数(rectified linear unit)深度学习中常用的函数(简单好计算)
-
把输入数据逐渐压缩成输出维度(例如 128 -> 64 -> 32 -> 10) 或者 把输入数据先扩充然后再逐渐压缩成输出维度(例如 128 -> 256->128 -> 64 -> 32 -> 10)
15.测试数据集一般只使用一次 训练数据集:训练模型参数 验证数据集:选择模型超参数 模型复杂度的因素: 参数的个数, 参数值的选择范围 数据复杂度: 样本个数,每个样本的元素个数,时间空间结构,多样性(比如分类个数) 数据复杂度和模型复杂度要匹配。
16.VC维:(Vapnik-Chervonenkis Dimension)的概念是为了研究学习过程一致收敛的速度和推广性,对于一个分类模型,一个最大的数据集的大小,不管如何给定标号,都存在一个模型来对它进行完美分类。 支持N维输入的感知机的VC维是N+ 1
17.权重衰退weight_decay, 使用均方范数作为硬性限制,通过限制参数值的选择范围来控制模型容量, ||W|| <= θ (小的θ意味着更强的正则项),使用范围更广 一般使用均方范数作为柔性限制
Wt先做一次衰退,权重衰退通过L2 正则项使得模型参数不会过大,从而控制模型复杂度,减缓过拟合
18.丢弃法 dropout :一个好的模型需要对输入数据的扰动鲁棒,使用有噪音的数据等价于**tikhonov正则,**丢弃法,在层之间加入噪音,加入噪音后,X 加入噪音后得到的方差还是要不变的,
dropout是一个正则项,正则项只在训练中使用,随机的丢掉一些神经元, 丢弃法将一些输出项随机置0来控制模型复杂度,常用在多层感知机的隐藏层输出上,丢弃概率是控制模型复杂度的超参数(丢弃率常用0.1, 0.5, 0.9)。 dropout 一般作用于全连接层的隐藏层,不用在卷积层,dropout一般不改标签, dropout类似于随机森林多决策树做投票的思想。
- 让训练稳定的方法:1).让梯度值在合理范围内(1e-6, 1e3),2).将乘法变加法(ResNet, LSTM) 3).梯度归一化,梯度裁剪 4). 合理的权重初始化和激活函数
为了防止值过大或过小而导致梯度爆炸或梯度消失,让每层的输出和梯度的均值和方差都保持一致。 激活函数是f(x) = x比较好,梯度是1,但是激活函数必须是非线性的, 梯度爆炸一般是输出值太大,梯度爆炸和梯度消失只能缓解,并没有解决
nan = not a number 非数 inf = infinity 表示无穷大
深度学习对数学要求没那么高,Python默认是64位
- _module是一个特殊的容器,里面存着一层一层的层或者块,或者说将输入的参数变成列表存在_module里, 网络模型是一个Sequential(序列),在Python中加下划线为原地修改,不加为复制后修改, torch.nn.Module 模块中的可学习参数都被包含在该模型的parameters 中,可以通过model.parameters()的方法获取;
state_dict()是一 个字典,包含了模型各的参数(tensor类型),多用于保存模型; model.state_dict()能够获得模型所有的参数,包括可学习的参数和不可学习的参数,返回值是一个有序字典OrderedDict.
21.nn.Module的__call__调用了forward。