零、声明
这是一篇失败的工作,我低估了batch normalization里scale/shift的作用。细节在第四节,请大家引以为戒。
一、前言
关于神经网络的作用有一个解释:它是一个万能函数逼近器。通过BP算法调整权重,在理论上神经网络可以近似出任意的函数。
当然,要近似出来的函数的复杂度肯定不能超过神经网络的表达能力,不然就会产生欠拟合的现象。而一个网络能承载的函数复杂度通常与隐层节点个数和深度有关。
本篇文章通过一种可视化的方法,来直观地表示出一个神经网络得表达能力。
二、算法
值得注意的是,神经网络所拟合的函数,是关于输入的连续函数。如果输入是图像的2维坐标,输出是3维的RGB颜色的话,那颜色就是坐标的连续函数,这一点是图像是否美观的一个很重要的标准。如果我们随机生成神经网络的权重,通过生成的图像的复杂程度,就能够大致看出一个网络能够表达出多么复杂的函数。
以下是生成图像的代码(基于DeepLearnToolBox,地址:https://github.com/happynear/DeepLearnToolbox):
layers = randi(10,1,10)+10;