虽然AI和大数据铺天盖地,但与自己的工作没有直接关系, 也就基本没有花时间去了解。仅仅是学习密码学方面的知识,已经是够烧脑了。
趁着假期几天时间,在微信读书中随意按‘TensorFlow‘’找出几本书,对比着开始想较为深入一些地了解机器学习的知识。
跳来跳去地看一通之后,得到一些粗浅的印象。
计算图、节点、线性表达、矩阵运算,这些概念都没有问题,但一直还没搞清楚激活函数(也有称激励函数的,就是activation function)的作用。这几本书都是侧重操作性的。网上查询的答案基本上都是:为了引入非线性因素。稍微深入一些的解释是,对数据集中的元素进行分类,并不总是线性可分的。线性可分,形象地讲,就是一条直线就可将数据分成两部分。引入激活函数,就是为了将不可分的元素转换为可以被线性函数分类的元素。大概是这意思。
理论上,对任何集合中元素的分类,总是可以由一个函数来定义的,不管这些元素看上去是多少复杂地混杂在一起。记得曾看到过一个形象的演示,就是在3D空间中的点的分类,无论怎么混杂,总会有一个曲面函数能将两种性质的点(演示中是不同颜色)完全分开。实际上,通过适当的坐标系转换,总会有一个线性函数能完成分类处理。线性函数就是2D的直线、3D的平面,n维空间的超平面。
而在TensorFlow中,激活函数的作用应该就是将达到指定阈值的元素输出为同一个指标值。TensorFlow提供了一些预定义的激活函数。但通常一次处理搞不定,所以,就会分层进行多次激活处理,而且,不同层次上可以选择不同的激活函数来处理。要达到这个目的,激活函数就不可以是线性的,否则,无论如何折腾结果总是线性的,虽然理论上,总可以用分段的线性表示去无限逼近任何非线性的表示,但想想都复杂得要了命。
比较难过的是,虽然激活函数通常很简单,但各层的激活函数作用叠加后,基本上就没人知道等效的分类函数是个什么鬼了。这就像简单的线性表示可以逼近任意复杂的表示。所以,选择什么激活函数,就差不多成了经验和技巧范围内的任务了。于是,所谓调优,就是耐着性子不停地更换、尝试,直到试出一个可以接受的模型来,或者,运气差时,永远都找不到合适的模型。神经网络系统要有训练、测试、验证数据集也就不奇怪了。而不懂理论的人士,也能将机器学习玩得很嗨,也就容易理解了。
原文:https://www.cnblogs.com/shiningjune/p/12817087.html