所以我读了一些关于神经网络的文章,我听说了一些与输入、输出、权重、激活函数、隐藏层、3 层方法和一些微积分有关的东西,但是这些与编程有什么关系一个实际的神经网络。我正在讨论 if 语句、while 循环、类、字符串、数组、散列和排序。输入、输出、权重、激活函数和微积分与实际编程有什么关系。尤其是微积分部分。以及如何编写可以“训练”神经网络/程序的代码。我很确定我觉得我在问初学者问题。
2 回答
首先,对不起我的英语不好。
神经网络包含(大部分):
- 神经元
- 这些神经元被组织成一组神经元:输入神经元、输出神经元和“认知”神经元。
- 这些神经元相互连接
- 激活一个神经元将信息发送到与之相连的神经元
从编程的角度来看,您可以将其视为:
- 神经元是一类
- Neuron 类包含一系列“连接”(对其他神经元的引用,有时带有相关的随机权重)。
- 神经元类有一个类似“recievePulse”的方法,它计算神经元是否激活。
- Neuron 类有一个类似“sendPulse”的方法,它可以激活它所链接的神经元的“recievePulse”。
recievePulse 是你的激活函数
权重是每个神经元发送到与其相连的神经元的脉冲强度
这样你就有了一个基本的神经网络。
这个怎么运作 :
一些定义的神经元接收不同权重的脉冲。这些是网络的感觉,即“输入”。根据您给它们的输入,它们也可能被激活并发出脉冲。“输出”是一组定义的神经元。当您激活输入神经元时,一些输出神经元可能会激活,模拟对输入的响应。
然后,您可以停用所有神经元,并从另一个输入重新开始。
这样,你就有了一个基本的神经网络,它会根据它的感知做出反应。
输入/输出示例:
- 输入1:蓝色量
- 输入2:绿色量
- 输入3:红色量
- 输出 1:“我喜欢这种颜色”
- 输出 2:“我不喜欢这种颜色”
- 在输入和输出之间一堆神经元(“认知部分”)。
该网络将感知颜色并决定它是否喜欢它。
训练:
有几种方法可以训练神经网络。
例如,你可以在神经元的答案是好的时奖励它们(通过提高所有活动连接的权重),并在它们的答案不好时给予它们不好的奖励(通过减少连接的权重)。
每个神经元之间连接的不同权重可以编码在一种 DNA 中,该 DNA 可以告诉神经元的结构等。这样,您可以选择具有适应度功能的“赢家”和“输家”,并重现在两者之间获得最佳答案的大脑他们。这样,您可以选择最好的大脑并让他们进化成为超级天才。
有关这方面的更多信息,我建议您记录自己的人工生命和健身功能。
除了 Heru-Luin 所说的一切,我将添加以下内容:
神经网络可以用硬件或软件实现。第一个神经网络是由自然界在原始生物的大脑中“实施”的,并通过进化完善到今天的现代动物的大脑中。
当将它们作为软件实现时,编写的“程序”实际上是创建大脑的软件模型,大脑是神经元的集合。这就是 if-then 语句、while 或 for 循环、面向对象等发挥作用的地方。如果一个人在传统意义上用 C++ 或 Java 编写了一个实际的程序,那么这就是编写的程序。
但是,一旦编写了该模型,它仍然基本上是无用的(就像婴儿大脑一样),因为它还没有经过训练。训练过程涉及调整软件模型的各种参数——神经权重、连接等。有时这也被称为对神经网络进行编程。这也不是完全不正确的:这与最早的数字计算机上的程序一样多是“程序”,这些程序基本上是硬件元件之间的接线变化。可以将其视为编写某个硬件处理设备的软件仿真器,然后他们在该仿真硬件上实现仿真程序。
微积分的作用在于理解训练方法如何以及为什么起作用,如何实施它们,以及如何使它们在计算上高效。完整的答案超出了这个答案的范围,通常是神经网络书籍的早期章节。简短的回答是,“因为神经网络试图找到能量表面上的最低点,而微积分是该过程中的必要步骤。”