之前介绍过AI的历史、用到的一些技术,如下文章:XXX 但是这些都不太够专业,但是太专业又不好懂,所以在网上找了个系列视频《飞天闪客:白话DeepSeek》,讲的浅显易懂,上链接:space.bilibili.com/325864133/l…
其实根据飞天闪客的说法,做博客文章,文字已经吸引不了读者了,现在是视频为王的时代,不过他是从利益的角度说的,从内容角度文字还有一定价值,特别适合深入学习的。其实博客相对于书籍也是一种快餐了,这种发展可能最终人只要发指令不需要学习,AI就自动给完成任务了,那就更快餐了。但从构建知识体系的角度,各种媒介都是可以的。
1. 从函数到神经网络
参考:www.bilibili.com/video/BV1uG…
先贴几个B站大V讲AI的视频,吴恩达、李沐的。
函数可以计算未知的事情进行预测,例如上面的知道直角三角形的两条边,就可以算出来第三条的长度。这就是符号主义的预测,但是面对复杂的世界,例如视觉识别就不行了。
但是这个函数怎么去描述复杂世界,这时冒出来一个词“猜”。例如在坐标轴上表示实例,找一条差不多的函数描述就可以,不要求精确,覆盖的场景多,能靠近结果就行,这就是联结主义。
这种连蒙带猜的路子,一开始一直被怀疑了几十年,因为不严谨。但是随着猜的技术进步,在应用中达到可以使用的地步了,并且大模型已经具备了智能涌现能力。
所以这个连蒙带猜的函数怎么去表示呢?由于样本的坐标基本毫无规律,就需要非线性函数。需要一个非线性函数把线性函数套起来。这个非线性函数就是激活函数。
常用的激活函数都比较简单,例如ReLU就是取一个大的值。面对复杂的样本,去描述就可以无限的线性非线性函数套娃,直到差不多准确描述。
这样公式表达很复杂,使用图的方法去表示,如下:
把函数用图形的方法表示,就是神经网络
神经元不断的抓取信息进行提炼,并携带者往后传递,直到可以决策,这个过程就是前向传播
随着复杂性的增加就构成了现代神经网络的摸样
要找出来这个函数,首先我们有样本就是x和y的值,需要找到过程中线性变化和非线性变化的运算值,这里就是要找线性变幻参数w和b以及非线性变幻函数
2. 计算神经网络中的参数
这里有一个拟合的概念,就是理论函数跟实际样本的差距比较小,衡量差距的方法就是就是让损失函数最小,例如下面的损失函数就是样本跟函数的坐标值之差绝对值相加,这样误差越大,损失函数值越大。
常用的损失函数是均方误差:
汇总如下:
求损失函数的最小值,那就用导数=0求极值点。看到这里数学终于要用上了。例如只有一个w求值过程如下:
如果两个参数w和b,那损失函数就是一个碗状的图,使用求偏导的方法找到碗底那点就可以了,这种找参数的方法在数学里面叫线性回归:
这里对多元函数,可以使用梯度下降法。关于调参就是让wb的值按步长往偏导数小的方向
这种梯度下降是在神经元层与层之间进行,这样就把所有神经元的求导逐步简化了。例如两层的:
对某一个参数w1求偏导如下:
前向传播用于求y
反向传播用于求参数,训练的过程就是反向传播的过程
3. 神经网络调参
调参的目的就是让预测尽可能的靠近靠近真实数据。首先训练出来的参数并不是跟训练的标本完全适配就是好的,有可能对训练的样本很好,但是拿去用时面对新的未知数据进行推理的时候就不行了,这种就就做过拟合。
在没见过的数据上预测的能力就叫泛化能力。模型训练的时候发生过拟合就会降低泛化能力,解决方法就是去除训练数据的噪声和随机波动。还需要简化模型及添加训练数据量。
但是有时收集数据比较麻烦,这时候就可以自己造数据。例如对图形进行翻转裁剪、加噪声等,这样新造数据就是数据增强。
训练参数时,如果参数感觉差不多可以用就可以提前终止训练,防止训练的多反而参数不好的情况。
另外判断训练参数就是通过损失函数小的方向发展,参数也不能太大,就把参数也加入到损失函数里面作为惩罚项。这真是有点新词多啊,不过对于新的技术,起点名字还可以,整体来看神经网络相关的新词还是比较贴切汉语。
抑制损失函数野蛮增长的方法就是正则化。
训练参数的时候,为了防止一部分关键参数很强,影响其他普通参数的发挥,会使用随机丢弃一些参数的方法。
训练的时候经常遇到的问题及解决思路:
到这里基础知识基本差不多了,主要就是神经网络的每层直接的函数表示,及函数参数的调试。然后针对不同的数据样本,例如图片、文本等会衍生出来很多算法,下一小节再展开聊下。