深度学习思考

机器学习的套路

大部分机器学习算法(包括深度学习),其实是在一个理想空间里(接下来我们会以三维空间为例子)寻找一个最大/最小值。三维空间是无限大的,在某个实际场景,假设我们有了解决某个问题的数据的全集(或者说是无限的数据),基于这些数据我们得到的优化函数的所有解构成了一座山。我们并不知道这座山的最低点是哪里,所以为了找到它,我们随机定位在一个点,试图沿着比较陡峭的方向下移动,并且希望能够因此而找到最低点。现实情况是我们并不能看到这座山,因为它笼罩在一阵迷雾里,我们只能根据已有的训练数据拨开一小片云雾,看到一小片地方,然后沿着比较陡峭的地方向下移动一点点,然后新进来的数据重复这个动作。大部分机器学习算法都需要转化成我描述的这个步骤来进行。

有了上面的解释,很多专有名词就很好解释了。比如迭代,所谓迭代就是不断移动的过程。比如收敛,为什么一般而言算法最终都会收敛,因为终究我们能够走到山里的某一个比较低的点的,之后就会在那徘徊,算法就算收敛了。

同样,我们也会遇到很多问题,比如局部最优解问题(你跑到一个小坑里,但是步长比较小,出不来了,已经收敛了),搜索空间太大(山的面积太大),不收敛(因为地形比较复杂)。

深度学习的容量足够大,因为它可以有几百万上千万的参数,这使得它理论上能够拟合任何形式的数据。根据我的实际经验是,它确实能很好的拟合训练数据,并且不是简单的记住他们。

端到端

NLP之前的文本分类工作,需要搞各种特征工程,有用没用各种神奇组合,搞个几亿维 然后喂给算法,有了深度学习,我们只要把文本丢进去就行了。虽然如此,我们只是把特征工程融合进了网络里。比如卷积会捕捉词与词的关系,还能加强或者忽略某些词的权重,这和我们手动把各种词的组合搞成新特征是一样的。

再比如Attention机制就是人们不断的通过观察和学习,在网络中加入我们认为重要的特征:
Attention无非是强调输入的每个词汇对输出的每个词汇影响力不一样的一个改进模型

深度学习将特征工作变得更加套路,并且具有更一般的适用性,然而,这不是全部,他的最大意义在于:

深度学习完成了原来由人工将特征准备好喂给算法到我们把抽取特征的方法告诉算法,算法自己完成特征的实际抽取过程的转变。

再回过头来看比如CNN, RNN等深度网络的变体,利用这种结构,我们可以捕获一些特殊的信息,比如平移 旋转,序列概率等 ,这本质上是人类总结出了几种很不错的特征种类,深度学习利用特定的网络结构在训练的时候自动抽取出这些特征。

可解释性

正如Peter Norvig说的,根据认知心理学,人类解释为什么做某个决策的理由,往往是事后编撰出来的,为了试图说服自己和其他人,当时做决策的时候并不一定真的是那么想的。这也解释了为什么成功不可复制(因为我解释我为什么做的时候其实不一定是真的,只是我们以为是真的)。 虽然我们在【机器学习的套路】的段落里说了一个数学上的大框架 但是很多东西确实解释不清楚。我们只能从产出的结果再回去猜机器学习这么做的原理或者原因。比如卷积你放在不同场景 可以有无数新的发现和解释。数据即规律,机器学习数据其实就是学习规律,这种规律人不一定能想明白,解释清楚。

一个比较好的例子是,word embedding, 效果很好,人们从实验认知到每一个数字都应该是有语义特征的,如果这种性质强烈的话,意味着CNN是可以使用宽度短于word embedding dimension 长度的 ,而不是像很多论文那样,filter的宽度等于embedding的长度。

和统计学的关系

统计是我们清楚要啥,然后我们做分析。 但是深度学习确实能学出我们不知道的一些东西。这就是他们的区别。

模拟人们的思维

我发现,人的很多东西也是可以反向通过机器学习的理论来解释的。

人的大脑做training的时候(比如去掌握某个新技能),也是一件很蛋疼的事,需要不断tuning(调整学习的方式,学习的来源,比如换本更好的教材)。

同样的大脑,有的人学的好,有的学的不好,是因为“很多人已经有了相关知识,这次学习只是fine-tune”。

对于为啥有的人智商就是高,有的人不高,只不过初始化参数有的人选择的好罢了,这个看运气。

大部分人掌握技能掌握的都不会太好,因为欠拟合是普遍情况。看着好像学会了,但只会纸上谈兵,大体就是过拟合了,还需要更多经验和数据。

很多人比较理性,有的人则感性,其实是正则化起的作用。

人脑是一个非常通用的模型,而机器现阶段比人更专注,更单一(但是也有人证明了一个算法可以同时完成多个任务)。机器可以在几小时几天学会新技能,而人则可能需要好多年。人类其实在能够工作前,需要训练很多年(从0岁到23岁?),之后都是fine-tuning了。

人学这么久的原因,说实在的,还是因为数据来的太慢,处理的太慢。人也是mini-batch输入问题,然后执行预测,根据这次的结果调整下一次行为的,以期下次能做到更好(损失函数)

机器学习什么时候可以真的“智能和进化”

机器学习学习的过程不是一个持久持续的过程,训练完成后冻结模型,然后给预测模型使用,然后接着收集更多数据,通常我们会重新从0开始训练。人脑显然不是这样的,训练应该是online的,预测反倒是可以离线的,走snapshot就好。这个是目前机器学习算法和人比较大的差异。

第二个就是网络的复杂度,人是一个通用的模型,可以处理很多不同类型的任务,机器通常只能做一类问题,这原因是网络结构还不够复杂,无法在一个大网络里,进化出不同的网络子区域。

第三个是目前还没有很好的否定模型,当一个模型稳定后,之后再进行新数据进来训练时,模型应该懂得坚持自我。当我对一个事物预测的概率是99%的时候,而外部的数据告诉模型,模型是错的,模型应该简单忽略掉这条数据,或者留下疑问,暂存下这个问题,以期获得更多反例,而不是一个样本就能需要模型进行反省。

哪天真的能够做到如上三点,我觉得就真有可能会进化了。

你可能感兴趣的:(深度学习思考)