全书数学基础:
1.海森矩阵
假设函数 f:Rn→R 的输入是一个 n 维向量 x=[x1,x2,…,xn]⊤ ,输出是标量。假定函数 f 所有的二阶偏导数都存在, f 的海森矩阵 H 是一个 n 行 n 列的矩阵:
左上角为f对x1求2阶导,右下角为f对xn求2阶导,第一行第二列为f对x1和x2求混合偏导。
2.范数
x 的 L1 范数是该向量元素绝对值之和,x的L2范数是该向量元素平方和的平方根,通常用 ∥x∥ 指代 ∥x∥2,矩阵 X 的Frobenius范数为该矩阵元素平方和的平方根。范数用于衡量向量的长度或大小。
通俗来说,机器学习是一门讨论各式各样的适用于不同问题的函数形式,以及如何使用数据来有效地获取函数参数具体值的学科。深度学习是指机器学习中的一类函数,它们的形式通常为多层神经网络。
思想:用数据编程
突触前神经元向突触后神经元的持续重复的刺激,可以导致突触传递效能的增加。
在人工神经网络中,突触间传递作用的变化被当作是(被映射成)神经元网络图中相应权重的变化。如果两个神经元同步激发,则它们之间的权重增加;如果单独激发,则权重减少。
线性回归是单层神经网络的例子。
作为机器学习的一类,表征学习关注如何自动找出表示数据的合适方式。深度学习是具有多级表示的表征学习方法。它可以逐级表示越来越抽象的概念或模式。以图像为例,它的输入是一堆原始像素值。深度学习模型中,图像可以逐级表示为特定位置和角度的边缘、由边缘组合得出的花纹、由多种花纹进一步汇合得到的特定部位的模式等。最终,模型能够较容易根据更高级的表示完成给定的任务,如识别图像中的物体。
NDArray是MXNet中存储和变换数据的主要工具。
可以轻松地对NDArray创建、运算、指定索引,并与NumPy之间相互变换。
autograd可以对python控制流求梯度。
dir可以查找有哪些类和函数,help可以查找用法。如:from mxnet import nd print(dir(nd.random))
help(nd.ones_like)。
我们通常所说的“调参”指的正是调节超参数,例如通过反复试错来找到超参数合适的值。超参数是人为设定的,并不是通过模型训练学出的。如迭代周期、学习率、批量大小、隐藏单元数、权重衰减lambda。
向量相加的一种方法是,将这两个向量按元素逐一做标量加法。向量相加的另一种方法是,将这两个向量直接做矢量加法。
nn,nerual network,该模块定义了大量神经网络的层,在Gluon中,Sequential实例可以看作是一个串联各个层的容器。在构造模型时,我们在该容器中依次添加层。如net = nn.Sequential(),net.add(nn.Dense(1))。
线性回归输出是一个连续值,因此适用于回归问题,如房龄+面积的房价预测。softmax回归则适用于分类问题,如垃圾邮件识别。
softmax与线性回归的运算式相同,但输出数等于标签的类别数,通过寻找最大值的方法得到离散的输出。softmax算符解决了归一化和不确定度的问题。
交叉熵反映了两个概率分布的差异,-Lnx导致误差越大,损失值涨得越快。
考虑到矩阵相乘仍为矩阵,多层的全相连网络仍等效为一层网络。因此引入非线性变换,称为激活函数,如ReLU函数、sigmoid函数、tanh函数。当输入接近0时,sigmoid函数接近线性变换。
由于无法从训练误差估计泛化误差,一味地降低训练误差并不意味着泛化误差一定会降低。
K折交叉验证:每一次,我们使用一个子数据集验证模型,并使用其他K−1个子数据集来训练模型。验证集主要用于调参。
给定训练数据集,如果模型的复杂度过低,很容易出现欠拟合(比如线性模型去预测多项式);如果模型复杂度过高,很容易出现过拟合。应对欠拟合和过拟合的一个办法是针对数据集选择合适复杂度的模型。如果发生过拟合,模型的精确度会下降。这是由于模型过度尝试捕获训练数据集的噪声。
权重衰减(?):在原损失函数中加入L2范数惩罚项,即模型权重参数每个元素的平方和与一个超参数的乘积。如:w1,w2是权重参数,b是偏差参数,带L2范数惩罚项的新损失函数为:ℓ(w1,w2,b)+λ/2(w12+w22)。(我猜这个的含义跟l2正则化相同,所以两段连一起。)
标准的最小二乘模型常常产生方差。即对于与训练集不同的数据集,模型可能不能很好地泛化。正则化能在不显著增大偏差的的同时,显著减小模型的方差。因此,正则化技术中使用的调整因子 λ,能控制对方差和偏差的影响。当 λ 的值开始上升时,它减小了系数的值,从而降低了方差。直到上升到某个值之前,λ 的增大很有利,因为它只是减少方差(避免过拟合),而不会丢失数据的任何重要特性。但是在某个特定值之后,模型就会失去重要的性质,导致偏差上升产生欠拟合。因此,要仔细选择 λ 的值。
倒置丢弃法:由于在训练中隐藏层神经元的丢弃是随机的,即h1,…,h5都有可能被清零,输出层的计算无法过度依赖h1,…,h5中的任一个,从而在训练模型时起到正则化的作用。具体来说,设随机变量ξi为0和1的概率分别为p和1−p。hi’=ξi/(1-p)*hi,以使得E(hi’)=E(hi)。
对反向传播的更深理解:类似复合函数求导由外向内逐层求导,神经网络由后向前求导。正向传播和反向传播相继进行。注意到,中间层存储空间不能被释放(因为正向算完反向还要用),因此训练比预测更占内存。