No comment yet

首先,我这里谈的是一个狭义的神经网络概念。至于那些深刻模仿神经结构的系统(如达尔文系列)不在讨论范围之内。

最近很多朋友问起神经网络的事情,也想用神经网络来解决问题。其实,对于神经网络,我一直是抱着一定偏见的,主要是因为其理论基础。首先,神经网络的确可以无限逼近任何函数,主要问题在学习方法和隐层神经元的选择。学习方法上,反向传播算法是一个强大的工具,在很多情况下,的确能够达到全局最优解,但是,反向传播算法中实际是应用的梯度下降法来逼近的,因此不可避免的可能会陷入局部最优解,也就是训练中所谓的过度拟合。求解适合神经网络的过程其实可以看作一个状态空间的搜索问题,因此,大家又用遗传算法、蚁群算法等来搜索全局最优解。但是遗传算法、蚁群算法本身的理论基础也是不扎实的,无法让人信服。

要让神经网络能够搜索到一个比较好的解,需要大量的样本。就人脸检测问题而言,至少要2000个正样本及8000个负样本才能得到较好的结果。而这,就是模型的理论基础不扎实所付出的代价。

关于隐层神经元的作用,可以看成是降维,但是又没有PCA一类的明确数学含义,因此,无法准确得出降维的效果,也就只能用实验的方法来判断隐层神经元的个数。

瑕不掩玉,的确,对于一部分只知道输入和输出的黑箱子问题,又没有明确的数学模型,用神经网络来逼近是现阶段比较实用的方法。我的建议是,如果有明确的数学模型,还是要用明确的数学模型来实现的。比如有关时间序列的,可以用隐马尔可夫模型,关于分类的,可以用支持向量机或者Bayes模型,这些有扎实数学基础的模型一般来说可以用这些数学模型更加明确的指导设计。

blog comments powered by Disqus