“那一些被认作常识的东西,是不是只是时代的附属品?从整个历史的长河去看待,也许是一些莫名其妙或者残忍至极的怪事而已”
———— 默默无名
这两年因为一些爆炸式的AI应用,导致又把公众的视野转向这个方向发展,自图灵提出“图灵测试”之后,AI已经爆发了两次热潮,相应的也跌入了两次低谷,目前看应该是进入了第三次的热潮,但是之后是迎来“奇点”,还是第三次低谷,尚不可知。
强人工智能(也就是通用人工智能),或者说机器的自我意识,自然是一个终极目标,但是当我们朝着这个目标行进的时候,总会获得一些小奖励,这些小奖励就是现在的弱人工智能,一些很实用的算法理论跟应用,虽然落地还有一些难度,但是整体趋于成熟,商用的应用已经开始遍地开花,短时间内将会引发全行业AI+,所有业务都会被AI刷新一遍,当然有人会说一堆职业要消亡了,又有很多人要下岗了。但是也同样会创造出更多的职业与岗位。而且自有人类以来,这件事我们也干过不少次了(前三次工业革命),完全不用惊慌,历史的车轮滚滚而行,总会丢下一部分人,又载上另外一部分人,时代就是逆水行舟,不进则退,总要保持学习,保持上进,保持饥渴。如果时代抛弃了你连一句再见也不说,那你就得赶紧加快脚步上去揍它一顿。
---------------------------------------------------------------------------(这看上去像一根线)-------------------------------------------------------------------------------
闲话少说,为各位呈上各类流弊的算法简介(通俗易懂的说明,具体细节不表),可能会有些地方讲的不对,希望能得到一点友情提醒,我会立马修正。
CNN:卷积神经网络
我在上一篇关于 tensorflow(谷歌开源AI框架)的踩坑日志有说过一点关于卷积神经网络的基本原理。
当然具体原理我还是推荐看这篇
就是卷积层+N层神经网络BP层(也叫全链接层) 关于 BP的原理我之前有写过一篇了,翻回去看看就有了。
那卷积层具体是什么呢?很像是一个滤镜层,我们知道实际上图像是由每个像素点组成的矩阵,然后每个像素点又可以由 RGB 3原色的数值表示范围是(0-255) 如果做一次灰度处理,那么每个像素点就是由0-255的灰度数值表示。那图像就等同于 一个 2维的 数字矩阵。 当然如果颜色想保留的话,不做灰度处理的话,RGB就等同于3个不同的矩阵,长宽是一样的。里面的数值不同而已。
那我们回到卷积层,就是拿一个卷积核在这个矩阵上滚一遍(矩阵相乘)得出一个新的矩阵。卷积核也是一个小的2维矩阵,不同数值的卷积核,可以对这张图片提取的信息不同,这就是图像的特征, 比如说把一个专门提取竖线的卷积核在原始图片上滚一遍,就能获得一个全部都是竖线的特征图。如果我们要做一个竹子的识别器,肯定要用这个特征了。但是如果要做一个篮球的识别器,就用不上了,用或者不用,这是由BP层决定的。但是提取的工作还是要做的,但是怎么决定卷积核应该是由什么数值构成呢?随机! 因为这个算法比较通用,可以做成识别各种东西,所以卷积核应该是任意特征都能提取的,那只要生成1000,1W ,或者1亿个卷积核,每个都在这个图像上滚一遍,就能提取1亿种特征了。如果最后BP层只用到其中一个特征就能识别竹子或者篮球。那岂不是非常浪费,所以卷积核的数量要根据识别复杂度而定。否则计算量很可怕。
当然CNN里面还有很多细节,比如池化层,归一化,dropout 。
池化层也有几种不同的方法,如果是求均值就是mean pooling,求最大值就是max pooling
池化就是降维比较好理解一点吧,为了减少计算量。
归一化(Normalization,也叫规范化)是为了让数据在网络中传输的时候不要太大,或者太小,或者太稀疏。
早前的一些归一化方法 看这篇 《归一化方法总结》
后来google 有一篇论文讲了另外一种方式 Batch Normalization
听说效果不错。
dropout是指随机的把一些特征失效掉来训练这个网络,这样泛化能力比较强。我自己实践过一次,但是感觉训练过程变得更久了,波动更大了。慎用。
全链接层的梯度下降方法也有很多种如:
这里列了一些tensorflow 内置的一些梯度下降优化器 GradientDescentOptimizer,AdagradOptimizer,MomentumOptimizer,AdamOptimizer
CNN的算法里面有很多参数要调,比如说网络的层数,初始学习率,dropout的概率等等,这类统称为超参数