参透AI(持续更新)
在chatgpt流行之前就想把底层的东西好好研究一遍,正好借此机会,保持长期更新,本文会涉及的内容应该会有:非常基础的一系列知识,从监督和非监督学习开始,到浅层神经网络,再到损失函数,梯度下降,如何衡量网络,正则化,卷积,Residual networks,transformers…强化学习,等等,所以要长期更新。
机器学习三个分类
强化学习,监督学习,非监督学习。
万能近似理论
Universal Approximation Theorem
如果一个只有一个隐藏层的浅层网络有足够多的单元的话,一样可以逼近任意的连续函数。
浅层网络的ReLU和线性区间的关系
在这种情况下,有N个ReLU,就可以造出来N+1个线性区间.
深度网络替代浅层网络的原因
同样的隐藏单元,深度网络可以代表更多得多的线性区间。
同样的隐藏单元,深度网络可以更快地train。
同样的隐藏单元,深度网络可以用更少的数据得到相同的准确性。
对数函数作用特点
在与原函数相同的x(或输入)值的情况下,仍能达到最大值(但不一定是原来的值)。
softmax函数
给任意输入的值得到一个从0到1的像概率分布一样的结果。
梯度下降
可能会卡在局部最小值,但这在高维环境中似乎并不是个大问题。
Nesterov动量
Nesterov动量是简单动量思想的一个变种,其中动量步骤是在梯度计算之前进行的。
反向传播算法 前向传导
为了计算weights的导数,我们需要计算和存储隐藏层的activations。这被称为前向传递,因为它涉及到按顺序运行网络方程。算到最后就能知道loss是多少了。
反向传播算法 反向传导
向后传递首先计算网络末端的导数,然后向后工作以利用这些之前计算好的冗余。
梯度爆炸和梯度消失
如果我们初始化的值较大,梯度的大小在我们通过网络后迅速增加。如果我们初始化的值较小,那么幅度就会下降。这些问题分别被称为梯度爆炸和梯度消失问题。
噪声,偏差,方差
这是针对数据的,训练数组和测试数据相对比,经常可以得出结论是因为这三个的原因导致模型效果不好。
噪声先天存在,啥也不能做。
偏差是指模型不够灵活,比如说拿3个ReLU来表达正弦函数,这肯定是有缺陷的,这可以通过提高网络的复杂度来改善。
方差是指模型收敛的结果不太足够拟合数据,并且由于是随机学习算法,每次训练的模型都会有不同的方差,这可以通过增加训练数据量级来提升。
偏差方差权衡
并不是一直增加模型的复杂性,偏差就会一直变小,过于复杂的模型数据不足会导致容易过拟合。
存在一个中间状态,模型的容量和数据量在这个点刚好是最小偏差,方差还不变大。
双重下降
在存在噪声的数据集中,随着增加模型的复杂度(参数数量),基本都会出现两次误差下降的情况,目前原因尚不明确。
三种数据作用
训练数据(用于学习模型参数)、验证数据(用于选择超参数)和测试数据(用于估计最终性能)。
正则化
正则化是指为了减少训练集和测试集的性能差距的一系列方法。严格讲是给损失函数加东西,然后再选参数。 提高泛化能力的一系列办法。
初始化
权重为0的网络代表着都给裁减了。权重太大会出现梯度爆炸,得到NaN值。权重太小会出现梯度消失,训练就无法正常停止。
Loss规律
当测试数据的loss在一定轮数内下降到一个最小值后,逐渐上升的情况通常被认为是模型出现了过拟合现象。
隐式正则
在梯度下降和随机梯度下降算法中,都会对模型参数进行更新,并在更新过程中通过学习率等超参数进行调整。这个调整过程本身就是一种正则化,可以防止模型在过拟合时发生震荡,从而使模型更加平滑。此外,由于随机梯度下降算法采用随机采样,因此每次更新的参数是不同的,也可以视为一种正则化,从而使模型更具泛化能力。
Early stopping and L2
Early stopping和L2正则都试图避免过拟和。Early stopping通过监测训练性能,满足条件就提前结束训练。L2通过在损失函数中加入模型权重的平方和作为正则化项从而避免过度拟合。
集成学习
把一组模型一起计算之后,按照不同的方法得到一个结果的办法。比如说算平均值。
Dropout
这个方法随机将一定的隐藏单元权重置为0,这使得部分单元失效,这可让整个过程不会太过于依赖某一个单独的单元,从而得到避免过拟合的效果。
添加噪音
可在三个地方加:输入数据,权重,标签。 每个mini batch都做不同的随机,这导致了不会倾向任何一个点,从而避免了过拟合。
迁移学习
当训练数据不足时,借用已经训练好的模型进行微调后得到较好的结果。 前后两个任务应该具备一定的关联性,将训练好的模型去掉输出层,加上新的输出层或者多层,再一次只对新加的层进行训练,或者直接整个模型进行微调。 迁移学习的概念来源于大多数的参数已经被第一个模型初始化好了,更容易得到一个不错的结果。
多任务学习
训练出来的模型是为了同一时间多个目的输出。比如说,同时预估segment和depth。因为每个单独的任务带来了更多的相关性数据,对每个任务的性能都会有提升。
自监督学习
自监督学习有两个系列的方法:生成式和对比式。 生成式的例子:一堆文章,随机去掉一些词,训练模型识别缺少的内容。ChatGPT就是这么干的,它的词量号称有170T个。 对比式的例子:一张图片,通过变形得到第二张,训练模型识别哪一张是原来的。
数据增强
在数据集不足的时候,通过人为办法增加数据的办法。比如说对同一个图片进行旋转、翻转、模糊等等,标签还是原来的。
CNN输入224原理
经常出现图片进行分类的情况,用CNN的时候,把图片搞成224*224,原因是在256*256的图片中进行剪裁小图的办法。 因为8*32=256,要进行统一大小的剪裁的话,7*32是一个不错的选择。意味着长和宽都可以让出来一个32,剩下的其实就是224。 再在让出来的长和宽都是32的区间里,比如说左上角,选定左上角坐标落在这个区间,就可以产生大约1000(32*32)个244*244的新图出来了。
不变性与等价性
f[t[x]] = f[x] 这是不变性,经过转换的图片还能和原来图片得到相同的结果。 f[t[x]] = t[f[x]] 这是等价性,先转图再计算还是先计算再转图都能得到相同的结果。 卷积的目的就是为了达到这两个属性。卷积操作可以用于提取图像中的特征,并且具有平移不变性。 卷积神经网络中的池化操作可以提高特征的等价性,使得网络可以对不同的图像进行分类
卷积
卷积过程中有三人参数:大小,步长,间隔(kernel size, stride, dilation)。 kernel size决定一次卷几个元素。stride决定每次和上一次卷的时候相比要跳过几个元素。dilation决定单次卷的时候要跳过几个元素选一个。边界上的元素不够卷的时候,就用zero padding进行补0操作。也有办法是放弃边界,但会减小范围。
通道
用多个核并行进行卷积,可以得到一组结果,这样的结果被叫做通道。 卷积网络中越往后的层,其单独元素的感知场越大(能代表更大范围的内容。)
References