学习笔记之TensorFlow

没什么深度的学习终于探索到机器学习领域了,本着触类旁通的想法,先从在线资源比较完备的某墙外公司的产品学起。开始学习才想起来Google已经把developer网站搬到墙内了,一定程度上避免了尴尬的出现,不过做练习用的实验平台colaboratory还在外边,一方面琢磨Google为什么这么小心眼,没全搬进来,一方面庆幸实验室的网络上colaboratory甚至比上国内某些网站还方便;用起来才发现,这个平台貌似是基于Google云计算的,要是搬进来还得搭个云计算平台,确实难度有点大,希望能看到它进来那一天吧。期初看视频教程的时候还以为Google良心制作,居然给了中文配音版本,要不是经常出现的语法错误、比较机械的发音和音像匹配度问题还真发现不了——不由得赞叹,原来Google的机器翻译和语音合成技术已经到这个程度了(国内几大巨头也在开发,至于什么程度,还有待体验),不过还是希望后期加上点人工校对工作,一会“滕锁福楼”一会“传感器流”的,确实会分散注意力啊,可怜我这好不容易集中起来的注意力。

用着人家免费的课程和平台还一直揪着人家缺点吐槽人家也不太合适,还是说说学到了点啥吧。

首先说说这个TensorFlow是干什么的,个人理解,一句话概括就是,一个基于Python语言的机器学习平台。机器学习,这个概念一下子就高大上了不少啊。以教程当中所学到的内容,机器学习主要用来进行预测和分类,确切的说是利用现有数据,对未知数据进行推测。以教程中的案例来讲,对加州某个区域范围内的住房数据进行分析,并且提取相应的特征值,让机器对这些特征进行学习,推算已知信息(比如住房的位置、房间数,每间房住户数、房龄等)与房价(在学习过程中也是已知的)之间的数学关系,利用这一关系对其他的住房进行估值(泛化)。

其次再看这个系统是怎么做的。对于一组数据和一个数据之间建立联系的最直接方法应该当属线性回归,也就是最小二乘了。将不同变量的系数(权重)与最终房价之间的关系作为一个最优问题来求解,设置好迭代的步骤和速率,通过梯度下降法得到一组最优解(最佳权重),并通过均方差来衡量是否满足最优条件。这个迭代的过程也就是学习的过程了。

然后了解一下在学习的过程中容易出现的几个问题,一个是过拟合,也就是过度追求学习所得模型与当前样本的符合程度,会导致在泛化到其他样本时失去判断的准确性,为了解决这个问题,可以将数据集分为两个部分,训练集和测试集,用训练集得到的模型放到测试集里试试看,两者之间的均方差应当具有关联性并且近似相等,才能保证训练有效,为了更严谨,可以将数据分为三个部分,训练、测试和验证,避免多次根据测试结果调整数据时模型偏向测试样本;还有一个问题是线性回归的应用场景通常是线性系统,对于非线性问题直接求解存在很大困难,可以通过对样本的多个特征进行组合实现特征变量的线性化,以确保问题能够被求解;还有一个运算复杂度的问题,大数据的一大特点就是什么样的数据都有,还是以房价为例,在房屋样本库中,每套房子的房间数通常也就是个位数,而总房价则会从几万到几十万不等(数据库给的是美元,貌似这里边没统计豪宅),这样对不同的参数求取系数的差别和难度就会很大,于是在这里引入了逻辑回归算法,也就是通常所有的归一化,不管什么样的数据,通过在同类数据中进行比较得到一个介于-1~+1之间的浮点数,在不影响运算精度的前提下减小了计算量。

到目前为止都是算法层面的东西,讲得我头都有点大了,还是说说用这些算法预测出来的东西能干嘛吧,除了用来估计房价这种直接对数值进行估计的运算之外,还有一个就是通过预测出来的数值进行分类,比如我们常用的垃圾邮件分类,利用从邮件数据库中被标记邮件数据进行学习,对新邮件是否为垃圾邮件进行计算,得到一个数值,记为该邮件是垃圾邮件的概率,通过设置一定的阈值对该邮件进行判定,比如计算得到的数值大于0.95则判断该邮件为垃圾邮件,这个阈值的选取要考虑到ROC曲线相关的一系列参数,以避免误判和漏判,具体来讲在电邮分类上肯定是要尽量降低误判概率,因为误判的结果比漏判要严重。

最后就到了这个阶段学习最神奇的地方了,神经网络,抛开那些条条框框的概念,说直观感受,这个网络的运算方式起源于模仿人类神经的运行规律,信息在不同节点之间多次传递,最终形成一个结论,具体在运算的过程中是将每个样本的多个特征值进行组合,每个特征值可以同时存在于多个组合中,每个组合称为一个节点,每个节点输出值还可以再进行组合,得到下一层节点,就像人类处理信息只得到最终结果一样,这些中间过程在神经网络中通常不可见,称为隐藏层,而且为了解决非线性系统的问题,在隐藏层之间加入激活层,对层中每个节点的输出进行变换。从教程的角度理解,神经网络相对线性回归最大的优点应该就是通过嵌套运算来实现一对多的操作了,神经网络实在是有点太神奇了,还需要加以时日慢慢消化。

开始学机器学习,主要还是看重它的一个最重要性能,就是预测。这个预测跟算命最大的区别就是这个预测的背景是数据(算命的背景是道听途说,没有符合统计学规律的数据靠谱),如果从机器学习参数的选择角度来讲(几个参数的不同组合通常会使训练结果迥异),某种程度上两者可以说都有玄学的成分,还算是半拉同行。

下一步准备把它带入到航迹滤波算法里计算先验数据,尝试算出来一个更精确的预测坐标。如果可以的话还可以试着用来预测网络拥塞流量数据,做个预测控制。

看教程目录信息挺丰富的,可惜以往惯用的归纳方法在这里似乎失灵了,没能抽象出个思维导图,可惜了。

题图来自Google官方TensorFlow图标。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180408G1S9AX00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券