十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从零开始的深究手撕算法之路(一) ---- 大谈激活函数

从零开始的深究手撕算法之路(一) ---- 大谈激活函数 文章目录前引从零开始的深究手撕召回算法之路 ---- 大谈损失函数/激活函数一1、常见的激活函数1、Sigmoid 激活函数2、Softmax 激活函数3、Tanh 激活函数4、Relu 激活函数5、Gelu/Leaky ReLU/GELU/SiLU/Mish 激活函数后引前引行百里者半九十。纸上得来终觉浅绝知此事要躬行这个是我在刚学计算机的时候就深刻理解到的道理。尤其是现在的互联网 AI 时代让大家都开始变得非常的浮躁。我最近一直在做相关的搜索召回业务准确来说就是搜索业务。而且也是从传统的后台开发转到偏应用研究这边转到偏算法那边。我是希望去做后面的人力师这和正常的后台或者算法开发是一样的。我觉得应该需要这个目标如果要至少比他们更牛逼那我们就需要去研究更多底层的东西至少要比他们学得多。目前正在搭建全链路的召回包括1. 数据处理2. 训练模型3. 搭建召回链路与排序链路4. 召回、粗排、精排及相关性去年的时候我其实就已经深度学习了包括机器学习、深度学习相关的各种课程内容。实话实说没想到真的会有这么大的帮助。而我们这里现在的搜索场景业务最主要的模型还没有到排序的一步。例如召回和相关性我们都是用的是 BERT模型。这里的搜索业务还需要用到其他几个模型比如意图分类模型还有我们的 NER 实体提取模型。绝大部分的代码都是 AI 写的但是中间所有的原理我基本上都还是知道的。尤其是最后的技术选型、做各种项目实验以及很多超参数的调整。而且很多时候 AI 写的代码是很有问题的这个时候就必须要人工一行一行去 review。我觉得在这个过程中一旦你识别事物正确与否的能力没有 AI 强那么你做的所有业务就像是一个黑盒这是一个很恐怖的事情。所以一旦人开始接触新业务一定不能把 AI 的能力当做是你自己的能力。你必须在接触新行业时不停地去了解只有当你足够有能力去驾驭 AI 时你才可以把 AI 用好。不然的话所有的东西对你来说都是黑盒。一旦出了问题或者真的需要去做性能优化又或者单纯是哪些链路报错了你都无法应对。所以我觉得很多时候需要静下心来一行一行地重新用数学公式去推导。包括对于分类模型、NER 识别模型、双塔模型、相关性模型我需要重新详细推导一遍它们具体用到的损失函数以及原理为什么是这个样子。此外在过程中中间也会夹杂一些业务相关的内容。对大概是这个样子。我觉得在 AI 时代学习的成本是非常非常低的唯一最高昂的就是你的时间。而且现在最有价值的就是你能够深刻地了解并畅谈“为什么这里要有这个”。当你能一行一行读懂代码明白底层的原理是什么这种情况下你才可以说是真正去驾驭 AI。我相信遇到了这个时代最难得可贵的就是你需要静下心来去了解每一个地方的底层原理。只有这个才是真正你和别人去拉开差距的地方。纸上得来终觉浅绝知此事要躬行从零开始的深究手撕召回算法之路 ---- 大谈损失函数/激活函数一1、常见的激活函数1、Sigmoid 激活函数这里的激活函数其实就是 1 / 1 e^(-x)s i g m o i d ( x ) 1 1 e − x \mathrm{sigmoid}(x) \frac{1}{1e^{-x}}sigmoid(x)1e−x1​激活函数的画图是这样的我对这个函数的理解是这样的当然这可能只是我目前这个阶段的理解后续可能会有更深的理解它可以把不同维度的离散值或连续值映射到 0 和 1 的概率之中。尤其是以我们的多分类来说我们其实需要所有的标签概率之和等于 1。像这种情况我们只是用一个数值把所有的数值都放到 0 和 1 的概率之中因为我们需要输出这样的一个概率。无论是无论多大的一个值比如说 1 或者 -1又或者是 5000 万、-5000 万它的值都是无限接近于 1 或者 0。而且在这种情况下我们去求它的导数求导的值永远都不等于 0。 但是一旦值特别大或特别小看这个图就能知道它的梯度很有可能会坍塌到 0也就是完全训练不动。所以说我们需要用一整套工程手段让它尽量保持在中间的数据位置。比如在 -3~3 之间、-2~2 之间其他梯度也都相当健康能够让我们的训练快速收敛。2、Softmax 激活函数Softmax 其实我觉得可以这样去想S o f t m a x e x i e x 1 x 2 x 3 . . . x i \mathrm{Softmax}\frac{{e}^{xi}}{{e}^{x1x2x3...xi}}Softmaxex1x2x3...xiexi​我们可以认为sigmoid 就是 softmax 在 i2 时的特例对吧比如说我们现在只有两个分类的值那 sigmoid 那边的值加起来也一定是等于 1 的。在这个场景下基本上可以认为它们两个都属于同一个源我觉得这个数学形式会更好理解一点。假如说我们输出了 5 个值一共比如说是五分类嘛 [5, 1, 2, 0, 3]我们代入上面的公式就可以得到上面的 如果是工程化的话这个角度只会去减去一个离散最大值。比如说这里的值可能是 5000、5001、5002、5003像这种情况我们就减去这个最大值。反正从工程的角度来看这个值越有可能会越减对吧但其实从数值的角度上我觉得是完全 OK 的。 它最后变的角度可能就是 -3 -2 -1 0。 因为都减去了 5003就减去了里面的可能最大值 5003 把他们的数据都放在一个可控的范围。好了然后我们再回到最上面那个5 1 2 0 3减去了最大值 变成了0 -4 -3 -5 -2然后 带入。S o f t m a x e x i e x 1 x 2 x 3 . . . x i \mathrm{Softmax}\frac{{e}^{xi}}{{e}^{x1x2x3...xi}}Softmaxex1x2x3...xiexi​得到下面那几个值。e^(0) e^(-4) … e^(-2) 1.2102[1/1.2102, 0.0183/1.2102, 0.0498/1.2102, 0.0067/1.2102, 0.1353/1.2102]可得[0.8263, 0.0151, 0.0411, 0.0056, 0.1118]这个就是转换后的概率逻辑值转换成概率值 本质上尤其是多分类 / 分类问题 用Sigmoid和Softmax是非常好的这里通常配备的是交叉熵损失函数。嗯为什么这是这个损失函数后续我还会再继续介绍的。这里能推导的数学公式我都会尽量推导一遍这样你才会对这些损失函数有更深刻的理解。3、Tanh 激活函数Tanh 本质上是 sigmoid 的升级版。Sigmoid 其实也存在好几个问题吧。第一个它的输出全都是正数因为输出全都在 0~1 之间。第二个在中心点它的梯度下降权重没有那么重。我先说一下 tanh 的公式吧。T a n h e x − e − x e x e − x \mathrm{Tanh}\frac{{e}^{x} - {e}^{-x}}{{e}^{x} {e}^{-x}}Tanhexe−xex−e−x​可以说其实它就是 sigmoid 的升级版有以下几个优点1. 分布相对更对称在 sigmoid 里面输出值是 0~1可以认为训练梯度都是比较正向的。而在这里输出值是 -1 到 1分布相对来说会更对称一点。2. 中心梯度下降更明显在中心位置梯度下降会更明显一点。即使它把上下的分值拉开了你看这个图像就能看出来在中心下降得会更匀称一点。但是虽然它在比如你值非常零散的情况下对梯度下降的问题做了一些稍微的缓解但并没有完全解决这个问题。还有一个最最核心的问题吧。我知道这里会有梯度消失和梯度爆炸的问题。梯度爆炸在这里可能都还好最核心的是会有梯度消失的问题。比如我们的值一旦偏离了中心点位置就会出现这个问题。当然sigmoid也有这个问题而且sigmoid的问题应该比这个更严重。4、Relu 激活函数Relu 的激活函数我印象特别特别深因为它确实非常非常的简单是我理解的数学性质里面最简单的一个函数。但是确实在之前使用的过程中对它印象特别深刻效果特别特别好。R e L U ( x ) max ⁡ ( 0 , x ) \mathrm{ReLU}(x)\max(0,x)ReLU(x)max(0,x)这里最直接的优势在于当大于 0 时梯度永远等于 1。这样一来不会出现梯度消失的情况。在前向推理和后向推理时梯度非常简单。计算成本也非常非常低。从公式上来看就能很直观、很简单地知道这里的计算成本会非常低也不需要再去计算。而且在这种情况下对于负值梯度也是 0只不过这可能会导致某些神经彻底死掉。因为一旦出现负值可能后面那些样本在这个地方都是一些负向的梯度那有可能这个梯度接下来应该再也不会动。梯度就直接降成了 0那可能就不会再动了。还有一个在 0 点的时候它确实不是个连续函数。一旦出现 0这个梯度确实求不出来不可导5、Gelu/Leaky ReLU/GELU/SiLU/Mish 激活函数这个函数的具体公式我就不讲了。实话实说其实本质上我觉得也可以粗浅地了解一下它。粗浅地了解它其实就是一个门控的变体核心就是用 X 乘了一个系数。要么是在负向的地方不让它变得那么僵硬要么比如在大于 0 的时候它是一个可控的权重让它变得稍微柔和一点。基本上也就做了这些变化。下面有一张核心图可以看一下。。后引其实在激活函数这里就差不多了。我觉得你就是要分单元一块一块地去讲一块一块地去了解得非常详细自己去推导公式大概是怎么样以及效果大概是怎么样子从而对它有一个非常直观的了解。这样我们一块一块地去推进这一篇的话其实大概就可以先这样。
返回列表