目录
一、分类
通过前面的学习,我们利用梯度下降算法,在反复的前向和反向传播的训练下,以及能够让小蓝从偏离现实的直觉自动学习到符合现实的认知。但是总感觉有点怪怪的,因为这种精确拟合的方式似乎并不是一个智能体在思考的时候常见的模式。仔细想想,我们人在思考的时候往往不会产生精确的数值估计,而更常做的事情是分类。
比如给你一个馒头,你会说这么大的我能吃饱,而这么大的我吃不饱。我们更倾向于把馒头分为能吃饱和吃不饱这两类。而不会在大脑中构建出所谓的馒头大小和饱腹程度的精确函数曲线。
再比如我们一开始说过的一只小狗的眼睛,你可能把它分为可爱和不可爱两类,顶多再加一个吓人的分类,但是无论如何,很少有人会在大脑里建立眼睛大小和可爱程度的精确拟合函数。
对一个东西,简单的贴标签比仔细的计算更符合我们的生物本能,也就是说,人类思考问题的方式往往都是离散的分类,而不是精确的离合。
对于小蓝也是如此,若能精确的估算出不同大小的豆豆的毒性固然是好事,但是一般会采用更加干脆的分类,有毒或者没毒。假如小蓝本身有一定的抗毒性,比如最多能抗住0.8的毒性,只有超过这个毒性的豆豆才会让小蓝中毒,所以小蓝会更乐意把豆豆分为有毒和无毒两类。至于具体有多少毒,那就让小蓝里的科学家们去研究吧。
二、激活函数
从有毒和无毒的角度来看,豆豆数据其实是这样的,注意,我们的纵坐标不再表示毒性的大小,而变成了有毒的概念,1表示有毒,0表示无毒,不存在中间的值。所以面对这个两极分化的分类问题,我们之前的神经元预测函数模型是否还有效?很明显不行,这个函数的值可以大于1,也可以小于0,我们可能更希望让最后的输出变成这样。在一元一次函数的输出大于某个阈值的时候,固定输出1,而小于这个阈值的时候固定输出0。我们可以用一个分段函数很容易实现这一点,把之前的线性函数的结果在丢进一个分段函数中进行二次加工,而这个新加入的分段函数就是一种所谓的激活函数。
其实我们一开始提到的Rosenblatt感知器中也有激活函数,当时为了不造成困扰,我们并没有提及Rosenblatt感知器把线性函数的计算结果放入一个类似的符号函数中进行分类,也就是说到此为止我们才算见到了完整的Rosenblatt感知器。