卷积神经网络: 打破图像识别的瓶颈 AI
在机器学习, 神经网络领域, 对于不想过多了解底层原理的初学者而言, 其实有一个应用层面一般意义上的经典”hello world”, 那就是手写体识别, 因为其场景和问题都很简单明确, 更有经典的数据集mnist, 成为众多入门着必备的实践项目, mnist数据集的图片采用的是28*28的灰度图, 一行有28哥像素点, 一共有28行, 每个像素用一个字节的无符号数表示他的等级, 如果是0, 那就是最暗, 纯黑色. 如果是一个字节最大值255, 那么就最亮, 纯白色. 如果是中间的值, 那就是介于两个之间的灰色. 我们通过让不同像素点的灰度值不同而达到显示的效果.
深度学习: 神奇的DeepLearning AI
深度学习, 就是不断的增加一个神经网络的隐藏神经元, 让输入的数据被这些神经元不断的抽象和理解, 最后得到一个具有泛化能力的预测网络模型。
而我们一般把隐藏层超过三层的网络, 称之为"深度神经网络", 如此说来"深度学习"这个听起来相当高端大气上档次尤其是近些年被媒体包装的十分具有神秘感的名字. 瞬间也就觉得没那么道貌岸然了, 只有每个神经元在理解什么, 很难用精确的数学手段去分析, 我们唯一能做的就是, 搜集数据, 送入数据, 进行训练, 然后期待结果, 当然也不是说我们对一个深度神经网络完全不可把控. 起码我们能在比如, 学习率, 激活函数, 神经元层数和数量等等方面, 调节神经网络的大致工作行为, 俗称---调参。
高维空间:机器如何面对越来越复杂的问题 AI
如果我们把这个函数再三维坐标系中画出来, 那么就是一个平面, 正如一元一次函数再二维坐标系是一条直线一样, 这个线性函数的平面经过神经元的第二部分, 非线性激活函数之后, 就被扭曲成了一个s型的曲面, 正如一元一次函数的直线被激活函数扭曲成为一个s型曲线一样. 那么这个曲面就表示当大小和颜色深浅取某个值的时候.
隐藏层 AI
此时, 不论是不加激活函数的预测模型, 还是加了激活函数的预测模型, 似乎都开始变得无能为力, 因为从数学上来讲, 这些函数再任意范围内的单调性是一样的, 要么处处都是单调增, 那么处处单调减, 而新的豆豆的毒性却变得忽大忽小, 要能预测它们, 只能靠一些不那么单调的函数, 那么如何让预测模型能够产生这种山丘一样的曲线呢?
是时候, 让神经元形成一个网络了, 我们唯一做的事情就是多添加了两个神经元, 并把输入分别送入这两个神经元进行计算, 再把计算的结果送入到第三个神经元计算, 最后输出。
激活函数 AI
通过前面的学习, 我们利用梯度下降算法, 在反复的前向和反向传播的训练下, 已经能够让小蓝从偏离现实的直觉, 自动学习到符合现实的认知, 但是总感觉有点怪怪的, 因为这种精度拟合的方式似乎并不是一个智能体思考的时候常见的模式, 仔细想想我们人在思考的时候, 往往不会产生精确的数值估计, 而更常做的事情是分类, 比如给你一个馒头, 你会说这么大的我能吃饱, 而小一点的我吃不饱, 我们更倾向于把馒头分为能吃饱和吃不饱这两类, 而不会在大脑中构建出所谓的馒头大小和饱腹程度的精确函数曲线, 对一个东西, 简单的贴标签比仔细的计算更符合我们的生物本能, 也就是说, 人类思考问题的方式往往都是离散的分类, 而不是精确的拟合. 对于小蓝也是如此, 若能精确的估算出不同大小的豆豆的毒性, 固然是好事, 但是一般会采用更加干脆的分类, 有毒或者没毒, 假如小蓝本身有一定的抗毒性, 比如最多能抗住0.8的毒性, 只有超过这个毒性的豆豆才会让小蓝中毒, 所以小蓝会更乐意把豆豆分为有毒和无毒两类, 至于具体有多少毒, 那就让小蓝立的科学家们去研究吧. 那这里有我们的数据, 从有毒和无毒的角度来看, 我们的豆豆是这样的(看图), 注意我们的纵坐标不在表示毒性的大小, 而变成了有毒的概率, 1表示有毒, 0表示无毒, 不存在中间值. 所以面对这个两极分化的分类问题, 我们之前的神经元预测函数模型是否还有效呢? 很明显不行, 这个函数的值可以大于1, 也可以小于零, 我们可能跟希望让最后的输出变成这样, 在一元一次函数的输出大于某个阈值的时候固定输出1, 而小于这个阈值的时候固定输出0, 我们可以用一个分段函数很容易实现这一点, 把之前的线性函数的结果, 在丢进一个分段函数中进行二次加工, 而这个新加入的分段函数就是一种所谓的激活函数.
梯度下降和反向传播: 能改(下) AI
通过上面的学习, 我们已然了解现代神经网络的精髓之一的梯度下降算法, 但是如果仔细观察我们设计的预测函数, 你就会发现, 这是一个非常危险和不完善的模型. 比如在另一片海域里, 豆豆的大小和毒性的关系是豆豆越大毒性越小, 我们发现无论怎样调整w我们都无法得到理想的预测函数, 原因很简单, 我们的预测函数y=wx, 很明显是一个必须经过原点的直线, 换句话说, 这个预测函数直线的自由被限制住了, 只能旋转不能移动. 因为大家很清楚, 一个直线完整的函数应该是y=wx+b, 之前我们为了遵循, "如无必要, 勿曾新知" 的理念, 一直在刻意的避免这个截距参数b. 直到现在, 我们终于避无可避, 是时候增加"新知"了.
梯度下降和反向传播: 能改(上) AI
上节课, 我们通过顶点坐标公式, 求解出抛物线最低点的w坐标, 得到了让误差代价最小的w, 但是我们也通过算一笔账, 说明了这种一步到位求解的方式固然是好, 但是在输入特征过多, 样本数量过大的时候, 却非常消耗计算资源, 现在我们就来看看另外一种更常用的方式, 其实在上节课中也暗示了这一点, 我们用了一个"挪"字来描述这个过程, 抛物线最低点坐标的寻找过程, 其实不必一步到位, 大可以采用一点点挪动的方式, 比如, 一开始w的值是2, 如果误差在最低点左边, 就需要不断的把w调大, 而在右边的时候不断把w调小, 而具体实施起来也很方便, 我们使用"斜率", 一个开口向上的抛物线最低点的斜率是0, 而左边的斜率是负数, 右边的斜率是正数, 所以现在我们的目的很明确, 想办法得到代价函数的曲线, 在当前w取值这个点上的斜率, 这样我们就可以判断当前w取值, 是在最低点的左边还是右边, 然后不断调整w直到到达最低点, 也就是说,得到一个让误差代价最小的w, 我们之前已经证明了误差e和w形成的代价函数, 是一个标准的一元二次函数.