内容来源: 2017 年 6 月 24 日, 美登科技前端架构师邓鋆在 "腾讯 web 前端大会 TFC 2017" 进行一名前端工程师的机器学习之旅演讲分享. IT 大咖说作为独家视频合作方, 经主办方和讲者审阅授权发布.
嘉宾演讲视频地址: http://suo.im/4OHKqQ
摘要
美登科技前端工程师邓鋆分享自己的机器学习之旅心路历程.
未来的前端
多元输入. 现有的输入从最早的键盘鼠标到现在的触屏, 以后可能会是语音和手势.
另外一个方面就是因人而异. 我认为多年以后, 可能每个用户看到同一个产品的交互都是不一样的. 在人工智能面前, 我们要做的事情不再是一个产品, 也许会为每一个用户创造一个新的产品, 用最适应这个用户的方式去改造他的体验.
以及信息层次丰富. 信息应该有一种层次化的表达, 应该跟随人的注意力和一些细节的动作主动把一些信息展示出来, 而其它的信息更多是保留在背后, 在整个应用中作为一个暂时没有接触到的部分. 但是当你需要它的时候, 它能够第一时间跳到你面前.
还有就是 VR 和 AR. 通过近几年反复的推广, 这两个技术已经是开始小有成果的状态了. 但什么时候前端用户交互之间能被这两个技术所颠覆, 目前仍是未知数.
五分钟搞懂机器学习
人工智能在近几年的突破巨大, 主要体现在几个方面. 第一个是硬件的突破, 第二个是算法的突破, 第三个是大数据的存储. 这三件事促使了现在机器学习的领域一次又一次大的爆炸.
机器学习是什么
机器学习赋予了计算机 "不需要特定的编程而能够自行学习" 的能力, 通过训练来解决特定的简单问题.
传统编程与机器学习
传统编程最开始是人类去发现需求, 然后人类把需求转化成一个抽象的设计. 要实现它必须要有客户端各种程序和服务端巨大的库, 在此基础之上再去做相应的开发, 逐步分解并解决每一个子问题. 最后还需要人或者机器来进行测试. 而真正交给机器去做的一步只有运行, 其它步骤都是需要人工进行操作的.
在机器学习的方式下, 首先假设要解决一个特定的问题, 第一个步骤还是了解需求, 可以预见将来有一天机器能够去发现人类的需求, 然后机器去找寻需求的规律. 机器自动通过大量的数据, 实验, 找到这些事情相互的关联, 这个过程是完全没有人工参与的. 我们只是设定了网络结构和目标函数, 除此之外的思考过程都是机器完成的, 机器会自己在事后在验证它的方式. 由于机器需要吃掉大量的数据, 所以人类需要准备数据. 最后由机器完成执行, 人类辅助机器做测试与纠错.
浅层学习
如上图所示, 右边区域是我们的问题, 黄色区域里面有很多的点是我们所收集到的数据, 背景色是我们找到的解. 这幅图展现的就是通过浅层学习找到了问题的解. 但是浅层学习有一个巨大的缺点就是特征需要人工提前做抽取和处理.
深度学习
深度学习从结构上和浅层学习有巨大的区别, 我们引入了很多 hidden layers. 如图所示, 在一次乘法, 一次加法, 一次取极值之后, 到最后输出结果. 深度学习就是这样一个公式.
数据很重要
硬件最大的变化就是对 GPU 的使用越来越频繁. 人工智能深度学习的函数, 公式内部涉及的是大量的浮点运算. 这些函数在 GPU 出现之后, 有大量的浮点运算就交给 GPU. 事实上, 深度学习在 GPU 上的执行效率可能是在 CPU 上的 30~50 倍. GPU 也给机器学习带来了巨大的促进作用.
我们的尝试
千里之行始于足下, 我们的第一个目标是想要知道用户喜欢多大的字体, 这是一个很简单同时也很有用的事. 不同年龄用户喜欢的字体大小都是不一样的, 老年人比较喜欢偏大的字体, 但是年轻人或使用电脑显示器的会倾向于使用小的字体. 这个就是机器学习很擅长解决的预测.
怎么做
第一步是数据的采集. 先要有大量的数据, 什么用户喜欢多大的字体. 第二步就是训练, 把之前采集到的数据通过机器学习的方式去训练, 让这个网络拥有根据新用户的特征能判断出用户喜欢多大字体的能力. 还有服务, 就是把它最终用到应用内, 对前端开放, 让前端程序能够得到这些用户信息. 再然后就是实际的把这些东西做到前端应用上去.
常用函数与网络结构
预测服务我们通常会用 softmax, 要判断一个用户属于哪个类别, 使用 softmax 来对它进行预测.
在没有预先知道有几个类别的时候, 可以使用 k-means 让机器学习告诉我们是怎样的情况, 指定分类的数量, 然后机器学习自动帮助我们完成分类.
t-SNE 是一个很好的降维方式. 降维有一个很大的作用就是数据可视化, 我们能直观地看到这些数据的分布. 另一个作用是寻找最近点的命令.
CNN 用于处理机器视觉, RNN 和 LTSM 是做流式处理.
DeepQ Learning 是近年来机器学习的一个热点, 当机器有几种选择的时候, 它会尽量让机器去预测哪个选择最好, 然后看这个选择是否和机器预测的一样. 这就意味着当我们要解决这类问题的时候, 不需要预先准备测试数据, 这个算法可以自己学习.
一些奇奇怪怪的优化
预训练与组合网络. 预训练是机器学习中很重要的部分, 当你需要解决的问题有些复杂的时候, 可以预训练网络的部分组合, 这样可以大幅提高网络的训练速度.
还有就是规则化调整与网络简化, 以及极端偏见和理性仲裁者.
实际业务
实际上我们接下来准备去探索一些其它的事情, 比如语义搜索, 功能推荐, 智能推荐, 流失防止和催化转化, 以及自动化兼容性测试.
值得一提的是谷歌发布了 deeplearn.js, 正式拉开了在前端做机器学习的工业化序幕.
来源: https://juejin.im/post/5aed1a2351882567336a9c6e