深度学习好在哪里?
我们已知陷入了两难的境地:
当我们选择一个较为复杂的模型,它所对应的可选方程就会有很多,在最理想的数据集中,我们可以得到更小的loss,但是坏处就是理想和现实训练集训练得到的方程在实际数据集中的loss会有较大的差距。
而选择一个较为简单的模型的话,它所对应的可选择的function就会更少。对应的在最理想的数据集中,loss就会比较大。但是训练集所得结果和理想的结果距离就会较小。
那有什么手段可以使我们既可以得到较小的理想数据集训练得到的function的loss,还可以减小训练集得到的function在实际数据集中的loss与理想的距离呢?
深度学习可以解决这个问题。
1. 为什么需要深度学习
前情提要:俩relu可以合成一个hard sigmoid。
多个hard sigmoid可以合成任意piecewise function.
多个sigmoid也可以拟合任意function。
而每个function都可以用一个neural来计算,所以只要有一个hidden layer就可以拟合任意方程。但是为什么不只用一个hidden layer然后增加他的宽度,而是增加更多的layer的层数呢?
想要拟合同一个方程,deep比wide实现所需要的参数更少。所以deep learning反而不容易over fitting。(2011年论文)
而且更少的参数对应的需要更少的训练资料,对应求loss的上限公式。少的参数,总方程数就少,想要减小loss对总训练样本数的要求较少。
1. Analog-Logic Circus 类似物:逻辑电路
以逻辑电路为例(并不是深度神经网路)
输入一串01010…的编码,判断其中1出现的次数是计数次还是偶数次,偶数次(even)输出1。奇数次(odd)输出0。
上述要求如果只用两层逻辑电路完成,需要 2 d 2^d 2d个门,d为编码串的长度。XNOR:与门
2. Programming 类似物:程序
程序也不会把所有的function都放在main函数中。而是不断地互相调用。
程序这样不断地写单独的子函数可以避免结构冗长,增加可读性,更为简洁,增加代码复用率。
深度学习中deep的好处
只需要每层两个neural,K层就可以获得 2 K 2^K 2K个pieces的曲线。即deep, 对曲线的拟合是指数型增长的效果。
但是如果只用一层,且activation function为relu。那 2 K 2^K 2K个线段就需要 2 K 2^K 2K个neural。需要的参数过大。
二者对比,deep的模型更加简单,shallow的模型更加复杂,deep更不容易出现过拟合现象,需要的训练资料也更加少。
如果所需的function是复杂的且有规律的,那么deep的network优于shallow的,而语音和图像识别通常都可以满足这样要求的。