【发布时间】:2016-09-02 11:45:12
【问题描述】:
我想了解更多关于神经网络的信息,我正在开发一个 C++ 程序来制作一个 NN,但我坚持使用 BackPropagation 算法,很抱歉没有提供一些工作代码。
我知道有很多库可以用多种语言创建 NN,但我更喜欢自己制作一个。关键是我不知道实现特定目标(例如模式识别或函数逼近等)需要多少层和多少神经元。
我的问题是:如果我想识别一些特定的模式,比如在图像检测中,应该需要多少层和每层神经元?假设我的图像都是 8x8 像素,我自然会从 64 个神经元的输入层开始,但我不知道必须在隐藏层和输出层中放置多少神经元。比方说我要区分猫和狗,或者不管你怎么想,输出层怎么可能呢?我可以想象一个只有一个神经元的输出层使用经典逻辑函数 (1/(1+exp(-x)) 输出介于 0 和 1 之间的值,当它接近 0 时,输入是一只猫,当接近 1 时它是一只狗,但是 . .. 这是正确的吗?如果我添加一个像鱼这样的新模式怎么办?如果输入包含一只狗和一只猫(..和一条鱼)怎么办?这让我觉得输出层的逻辑函数不是很适合这样的模式识别,只是因为 1/(1+exp(-x)) 的范围在 (0,1) 中。我是否必须更改激活函数或将其他一些神经元添加到输出层?是否有一些其他的激活函数更准确地做到这一点?每一层中的每个神经元是否具有相同的激活函数,还是层与层不同?
很抱歉所有这些问题,但这个话题对我来说不是很清楚。
我在互联网上阅读了很多内容,发现图书馆尚未实现且难以阅读,并且对 NN 可以做什么,但不是它可以做什么有很多解释。
我从https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/ 和http://neuralnetworksanddeeplearning.com/chap1.html 中阅读了很多内容,在这里我了解了如何逼近一个函数(因为一个层中的每个神经元都可以被认为是一个阶跃函数,具有特定的权重和偏差阶跃)以及如何回溯传播算法有效,但其他教程和类似教程更侧重于预先存在的库。我还阅读了这个问题Determining the proper amount of Neurons for a Neural Network,但我还想涉及 NN 的激活函数,这是最好的,也是最好的。
提前感谢您的回答!
【问题讨论】:
-
我认为如果您的问题更加集中和简洁,您会在这里做得更好。此外,如果您删除 C++ 标记,因为这个问题与 C++ 无关。
-
为什么不尝试在逻辑回归等更简单的模型(本质上是没有任何隐藏层的人工神经网络)上实现反向传播,然后扩展到更复杂的模型?只是一个想法。此外,coursera (google it) 正在提供斯坦福大学教授 Andrew Ng 的 DNN 专业课程。信息量很大。
-
@Zroach 感谢您的 cmets,我将了解 Coursera 提供的有关 DNN 的内容。我想知道 DNN 的主要特征是什么,以及如何通过实现特定目标来构建一个 DNN。无论如何,从一个简化的问题开始是最好的方法。