“那一些被认作常识的东西,是不是只是时代的附属品?从整个历史的长河去看待,也许是一些莫名其妙或者残忍至极的怪事而已”
2017-2018这两年因为一些爆炸式的AI应用,导致又把公众的视野转向这个方向发展,自图灵提出“图灵测试”之后,AI已经爆发了两次热潮,相应的也跌入了两次低谷,目前看应该是进入了第三次的热潮,但是之后是迎来“奇点”,还是第三次低谷,尚不可知。
--------------(这看上去像一根线)--------------------
闲话少说,为各位呈上各类流弊的算法简介(通俗易懂的说明,具体细节不表),可能会有些地方讲的不对,希望能得到一点友情提醒,我会立马修正。
CNN:卷积神经网络
我在上一篇关于tensorflow(谷歌开源AI框架)的踩坑日志有说过一点关于卷积神经网络的基本原理。
就是卷积层+N层神经网络BP层(也叫全链接层)关于BP的原理我之前有写过一篇了,翻回去看看就有了。
那卷积层具体是什么呢?很像是一个滤镜层,我们知道实际上图像是由每个像素点组成的矩阵,然后每个像素点又可以由RGB3原色的数值表示范围是(0-255)如果做一次灰度处理,那么每个像素点就是由0-255的灰度数值表示。那图像就等同于一个2维的数字矩阵。当然如果颜色想保留的话,不做灰度处理的话,RGB就等同于3个不同的矩阵,长宽是一样的。里面的数值不同而已。
那我们回到卷积层,就是拿一个卷积核在这个矩阵上滚一遍(矩阵相乘)得出一个新的矩阵。卷积核也是一个小的2维矩阵,不同数值的卷积核,可以对这张图片提取的信息不同,这就是图像的特征,比如说把一个专门提取竖线的卷积核在原始图片上滚一遍,就能获得一个全部都是竖线的特征图。如果我们要做一个竹子的识别器,肯定要用这个特征了。但是如果要做一个篮球的识别器,就用不上了,用或者不用,这是由BP层决定的。但是提取的工作还是要做的,但是怎么决定卷积核应该是由什么数值构成呢?随机!因为这个算法比较通用,可以做成识别各种东西,所以卷积核应该是任意特征都能提取的,那只要生成1000,1W,或者1亿个卷积核,每个都在这个图像上滚一遍,就能提取1亿种特征了。如果最后BP层只用到其中一个特征就能识别竹子或者篮球。那岂不是非常浪费,所以卷积核的数量要根据识别复杂度而定。否则计算量很可怕。
当然CNN里面还有很多细节,比如池化层,归一化,dropout。
池化层也有几种不同的方法,如果是求均值就是meanpooling,求最大值就是maxpooling
池化就是降维比较好理解一点吧,为了减少计算量。
归一化(Normalization,也叫规范化)是为了让数据在网络中传输的时候不要太大,或者太小,或者太稀疏。
听说效果不错。
dropout是指随机的把一些特征失效掉来训练这个网络,这样泛化能力比较强。我自己实践过一次,但是感觉训练过程变得更久了,波动更大了。慎用。
这里列了一些tensorflow内置的一些梯度下降优化器GradientDescentOptimizer,AdagradOptimizer,MomentumOptimizer,AdamOptimizer
CNN的算法里面有很多参数要调,比如说网络的层数,初始学习率,dropout的概率等等,这类统称为超参数
虽然我们刚才说的都是图像上的,但是文字跟音频也可以转化成这种输入,类似说1*N的矩阵。
----------------------(这看上去跟第一根线没什么区别)----------------------
RL:强化学习(reinforcementlearning)
关于RL的详细内容可以看Deepmind的公开课
强化学习核心的原理是:
造一个agent(智能代理者)跟环境(state)交互(action)然后根据获得的反馈(reward)反复训练后,这个agent可以在遇到任意的state时都能选择最优的决策(action),这个最优的决策会在未来带来最大化的reward。
RL解决的问题是连续决策问题,就是有一系列的决策之后才会获得奖励的现实问题。比方说某baby3岁,暂且先叫A酱,A酱还不会拿杯子喝东西。我们知道最优策略就是
:靠近杯子,拿起来,倒进嘴巴里。
但是她一开始的时候并不知道看到一个杯子在远处,究竟是应该靠近,还是远离。而且就算反复做了这2件事,也没有一些立即奖励给她(喝到东西)。所以说奖励是滞后的,但是我们希望可以对动作的打分,根据分数的高低让智能体选出最佳的决策,比方说靠近杯子10分,远离杯子-10分。如果每一步都有这样的标量作为衡量标准的话,那么她就可以知道要获得奖励的最优策略是什么了,当然有些动作在不同的场景下会导致不同的效果,所以这里的打分要针对state-actionpair(不同状态对应不同的动作)评分。
所以RL的作用就是经过反复的训练,为每对state-action提供一个分数。这就Valuebased(基于分数的算法,其中的一种的RL算法实现方式)。
如果先假设最终的奖励分数是100分。那么究竟前一步应该分配多少分呢?然后前前一步又是多少?这里就用到了贝尔曼方程
s:state
a:action
Q就是我上面讲的分数。然后Qπ指的就是最优策略下的分数函数。
P是指状态s下决定某动作a之后=》下一个状态s的转移概率。(比方说A酱虽然见到了杯子,然后她使用了动作a1(拿起来)但是不一定能够成功,这里有个转移概率P)。
R是指立即奖励。
这里我们可以看到,当前的Q值是由两部分组成,当前R值+下一个状态的Q值。
假设折扣率这里是0.5,最终的奖励分数是100分。
反过来推导的话,A酱在喝到杯中物的时候Q值等于R值,因为没有下一个状态了。在往前一个动作(拿起杯子)因为只有1个动作,而且立即奖励R=0,所以Q值等于0+0.5*100=50。
然后再往前面一步,状态1(见到杯子)的时候选择(靠近),所以Q值是0+0.5*(0+0.5*100)=25
这是我们通过已知最优策略然后用贝尔曼方程反推Q值,这样便于理解Q值的含义。
虽然不知道最优策略,但是如果我们有一个所有状态所有动作的记录Q值的表,只要反复通过上面的过程推导就能知道这个大表的所有值,最终就能通过这个大表知道最优策略。
这就是Q-learning算法的逻辑。
当然Q-learning是不实用的,因为如果state跟action有非常多,这个表数据量要爆炸的。
RL很早很早就有了。
因为alphaGo就是基于RL的,主要用了蒙特卡罗树搜索算法(MCTS)然后RL这两年又被大神们推进了好多优化。
我摘一段放这里说明一下实现RL算法的几种类别:
RL现阶段比较实用的算法是:
DQN,DDPG,A3C,DPPO等
摘一张图大家看看
横轴是训练次数,纵轴是超过人类水平百分比,100%就是等同于平均的人类玩游戏的水平,在57款雅达利游戏中的平均表现。
2017-2018年一些很有趣的开源应用示例,以及使用的算法
CNN:图像识别人脸识别风格迁移
RL:alphaGO游戏代打机器人控制阿里商品推荐系统
GANs:风格迁移草图生成实体图猫脸转狗脸去掉图像遮挡年龄转移超分辨率
RNNLSTM:翻译模型,生成古诗,生成对联,PSD生成HTML代码