Notes---苏剑林博客(神经网络与深度学习基础)
其实很久之前就看到过别人推荐他的 blog 了,但是一直没看,最近虽然也很忙,但是总是不想干“正事”,就忙里偷闲,看看能不能把他的 blog 读完吧。
我的 Reading List 主要是根据知乎上一个同学(WhyWait)整理的,所以也就按照他的分类来读了。
这一篇 Notes 就是关于“神经网络与深度学习基础”这个分类底下的 Blog,希望这一次自己能够坚持下来,至少把和自己相关的部分看完。
闲聊:神经网络与深度学习
这篇博客写在 2015 年,但其实里面的很多想法到今天也很有用,从某种程度上从底层解释了神经网络从何而来,为什么能 work。
大部分人都知道,神经网络其实就是一个拟合函数,虽然网络里的单个节点只是一个非常简单的函数,但是大家也都知道我们已经证明了只要我们把足够多的这种简单函数复合到一起,可以拟合任意一种函数。
大部分也知道,很多时候神经网络其实干的事情是“抽特征”,如果你特征抽的好,只需要一个非常简单的 MLP 就可以去的很好的效果。
可其实大部分人都没有系统的知道,上面这两点就是我们的 key point,借用原文内容,就是“1、函数的自变量是什么?2、这个函数是什么?”。不管我们现在的 AI 发展到了多么 fancy 的地步,其实我们都是希望给他一个 input,他给我们一个我们想要的 output。那其实模型就是一个函数。既然如此其实我们要解决的问题就是上面这两个问题。
我的观点就是 DL 直接这两个问题一起解决了。函数的自变量他可以自己学到提取一个很好的特征,函数长什么样他也可以自己去学一个合适函数。最后的问题就是我们需要高质量的数据,这也是很多时候,我们想要训练一个 performance 更好的模型面临的瓶颈。
浅谈神经网络中激活函数的设计
激活函数在神经网络里是很重要的,因为它往神经网路里加入非线性,而这个非线性能起到非常神奇的作用,可以说之所以神经网络能有今天的强大效果,很大程度上要归功于非线性的引入,就是最开始有人发现引入非线性之后,神经网络的效果大幅提升了,才有后来的这么多人持续的跟进,造就今天 AI 的局面。
但是虽然引入非线性的这个激活函数很重要,但是究竟什么样的激活函数效果最好,这很难如评判,我们最开始用 Sigmoid 函数,后来用 ReLu,其实现在大部分也是用 ReLu,因为我们现在基本上会认为换激活函数能起到的效果有限,只要有一定的非线性性就好。再后来有这个 Swish,以及苏神自己提出的激活函数,可能在不同的任务上会有不同的表现,但总的来说,我们不必放太多精力在激活函数上。
从Boosting学习到神经网络:看山是山?
这里讲了 Boosting 算法,主要是拿 AdaBoost 算法举例子,怎么说呢,我确实是不太了解细节,但是组合模型我大概是知道的,就类似于 model ensemble。
这篇文章里又强调了一个观点,就是特征的重要性,只要有一个好的特征,就算是非常简单的回归模型,或者我们现在喜欢用 MLP都可以有非常高的精度。
苏神这里提出的观点是,我们不把模型看成模型,而把模型看成特征提取器。这样的话,我们用多个模型整出来的预测结果,组合起来其实就是一个新的特征,我们可以用这个特征再去训练一个模型,或者最简单,做个投票,来的到最后的结果。
不过这个到现在的话,其实也是一个比较“显然”的结论了,就像之前我也提到过,大家基本上都会把神经网络看成一个特征提取器,然后最后用一个简单的 FFN/MLP 去得到一个结果。