一直都只是对传统机器学习方法有一点点的学习,没有了解过深度学习,但是一直都想下手去学。不管哪种算法,细节都很多。而且在实际的项目中,怎么用好,发挥最好的作用,要求一个人对应用场景、数据和算法,都有很好的理解。要学的太多,人又懒,不知道什么时候能好一点。
不管怎么说,知道一点就记下来一点吧。
1. 机器学习的三步
机器学习中的分类问题,以有监督学习来说。输入就是N维空间的很多很多点,分类问题就是找线(线性或者非线性,都是函数)把这些点彼此分开,并分的好。所以,问题的本身就是把实际问题转化为数学问题,然后找答案。这个答案可以用复杂的函数解决(树结构也是函数)。总之这个过程学习的是一种映射关系,学习的是最优的一个函数。
因此机器学习过程分为三步:1. 定义函数的结构,也就是一堆函数 2. 定义一个函数 来评价映射函数的优劣 3. 找到最优的函数
对于深度学习来说,在第一步的重点是定义了神经元的结构和神经网络的结构。
一般以softmax为输出层。它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类。且以交叉熵为损失函数,以softmax层作为输出,进行梯度下降来逼近最优解的时候,求导后计算非常简单。、
那如何选择出最优的函数,常用方法为梯度下降法。随机选择参数的初值,计算损失函数对参数的负导数作为方向进行一定步长的移动。梯度下降无法保证是全局最优解,参数的不同初值可能会使损失函数达到不同的局部最小值。
2.deeper is better than fat ?
理论上,任意的连续函数都可以用含有一层隐藏层的神经网络来表达,只需要给定足够的隐藏层神经元结点。
但是在有一定数量的参数的前提下,deeper is better。
神经网络的结构很像逻辑电路,神经元则类似于每个门。两层的逻辑门可以表达任何的布尔函数,而一层的隐藏层的神经网络具有相同强大的表达的能力。多层的隐藏层来表达函数会更简单,使得参数更少,需要的数据更少。
网络的每一层都可以看做是一个多分类的分类器。深层网络的每一层可以理解为对最后分类目标特性的模块化分类器,这样理解的话,相当于每一层的分类器在训练的时候不需要考虑前面隐藏层已经可以区分的特征,只考虑本模块需要进行分类的特性,都有等用于样本容量的样本数,且对于这个模块来说,已经足够多。因此整体需要更少的样本就可以较好的效果。当然,这些模块是从数据中自动学习到的,我们只是指定了有多少模块(层数)。
网友评论