更改
→模型
==模型==
==模型==
一个“人工神经网络”是一个称为[https://en.wikipedia.org/wiki/Artificial_neurons 人工神经元]的简单元素的网络,它们接收输入,根据输入改变内部状态(“激活”),然后依靠输入和激活产生输出,通过连接某些神经元的输出到其他神经元的输入的“网络”形式构成了一个[https://en.wikipedia.org/wiki/Directed_graph 有向的][https://en.wikipedia.org/wiki/Weighted_graph 有权图]。权重和[https://en.wikipedia.org/wiki/Activation_function 计算激活的函数]可以被称为“学习”的过程改变,这被[https://en.wikipedia.org/wiki/Learning_rule 学习规则]控制。
===人工神经网络的组成部分(Components of an artificial neural network)===
===人工神经网络的组成部分(Components of an artificial neural network)===
====神经元(Neurons)====
====神经元(Neurons)====
一个有标记<math>i</math> 的神经元从前驱神经元接收输入 <math>p_i(t)</math> ,这些前驱由下面的部分组成:
一个有标记<math>{j}</math> 的神经元从前驱神经元接收输入 <math>p_{j}(t)</math> ,这些前驱由下面的部分组成:
* 一个''激活'' <math>a_i(t)</math>, 取决于一个离散时间参数,
* 一个''激活'' <math>a_i(t)</math>, 取决于一个离散时间参数,
* 和一个 ''输出函数'' <math>f_{out}</math> 计算从激活的输出
* 和一个 ''输出函数'' <math>f_{out}</math> 计算从激活的输出
: <math> o_i(t) = f_{out}(a_i(t)) </math>.
: <math> o_i(t) = f_{out}(a_i(t)) </math>.
通常输出函数只是简单的[https://en.wikipedia.org/wiki/Identity_function 恒等函数]
一个“输入神经元”没有前驱,但作为整个网络的输入接口。同样地,一个“输出神经元”没有后继而作为整个网络的输出接口。
一个“输入神经元”没有前驱,但作为整个网络的输入接口。同样地,一个“输出神经元”没有后继而作为整个网络的输出接口。
===作为函数的神经网络(Neural networks as functions)===
===作为函数的神经网络(Neural networks as functions)===
神经网络模型可以被看成简单的数学模型,定义为一个函数<math>\textstyle f : X \rightarrow Y </math> 或者是一个 <math>\textstyle X</math> 上或 <math>\textstyle X</math> 和<math>\textstyle Y</math>上的分布。有时模型与一个特定学习规则紧密联系。短语“ANN模型”的通常使用确实是这种函数的“类”的定义(类的成员被不同参数,连接权重或结构的细节如神经元数量或他们的连接获得)
神经网络模型可以被看成简单的数学模型,定义为一个函数<math>\textstyle f : X \rightarrow Y </math> 或者是一个 <math>\textstyle X</math> 上或 <math>\textstyle X</math> 和<math>\textstyle Y</math>上的分布。有时模型与一个特定学习规则紧密联系。短语“ANN模型”的通常使用确实是这种函数的“类”的定义(类的成员被不同参数,连接权重或结构的细节如神经元数量或他们的连接获得)
数学上,一个神经元的网络函数 <math>\textstyle f(x)</math> 被定义为其他函数 <math>\textstyle g_i(x)</math>的组合,它可以之后被分解为其他函数。这可以被方便地用一个网络结构表示,它有箭头描述函数间的依赖关系。一类广泛应用的组合是“非线性加权和”, <math>\textstyle f (x) = K \left(\sum_i w_i g_i(x)\right) </math>, 其中 <math>\textstyle K</math> (通常称为【激活函数】) 是某种预定义的函数,如【双曲正切】或【双弯曲函数】 或【柔性最大值传输函数】或【线性整流函数】。激活函数最重要的特点是它随输入值变化提供一个平滑的过渡,例如,在输入中一个小的变化产生输出中一个小的变化 。下面指的是一组函数 <math>\textstyle g_i</math>作为【向量】 <math>\textstyle g = (g_1, g_2, \ldots, g_n)</math>.
数学上,一个神经元的网络函数 <math>\textstyle f(x)</math> 被定义为其他函数 <math>\textstyle g_i(x)</math>的组合,它可以之后被分解为其他函数。这可以被方便地用一个网络结构表示,它有箭头描述函数间的依赖关系。一类广泛应用的组合是“非线性加权和”, <math>\textstyle f (x) = K \left(\sum_i w_i g_i(x)\right) </math>, 其中 <math>\textstyle K</math> (通常称为[https://en.wikipedia.org/wiki/Activation_function 激活函数]) 是某种预定义的函数,如[https://en.wikipedia.org/wiki/Hyperbolic_function#Standard_analytic_expressions 双曲正切]或[https://en.wikipedia.org/wiki/Sigmoid_function 双弯曲函数] 或[https://en.wikipedia.org/wiki/Softmax_function 柔性最大值传输函数]或[https://en.wikipedia.org/wiki/ReLU 线性整流函数]。激活函数最重要的特点是它随输入值变化提供一个平滑的过渡,例如,在输入中一个小的变化产生输出中一个小的变化 。下面指的是一组函数 <math>\textstyle g_i</math>作为[https://en.wikipedia.org/wiki/Vector_(mathematics_and_physics) 向量] <math>\textstyle g = (g_1, g_2, \ldots, g_n)</math>.
[[File:Ann_dependency_(graph).svg.png|150px|ANN依赖图]]
本图描述了 <math>\textstyle f</math>的带有箭头指示出的变量间依赖的这样一种分解,这些可以用两种方式解释。
本图描述了 <math>\textstyle f</math>的带有箭头指示出的变量间依赖的这样一种分解,这些可以用两种方式解释。
第一种视角是功能上的:输入<math>\textstyle x</math> 转化成一个三维向量<math>\textstyle h</math>, 它接着转化为一个二维向量 <math>\textstyle g</math>,它最终转化成 <math>\textstyle f</math>. 这种视角在【优化】中经常遇到。
第一种视角是功能上的:输入<math>\textstyle x</math> 转化成一个三维向量<math>\textstyle h</math>, 它接着转化为一个二维向量 <math>\textstyle g</math>,它最终转化成 <math>\textstyle f</math>. 这种视角在[https://en.wikipedia.org/wiki/Mathematical_optimization 优化]中经常遇到。
第二种视角是概率上的:[https://en.wikipedia.org/wiki/Random_variable 随机变量] <math>\textstyle F = f(G) </math> 取决于随机变量 <math>\textstyle G = g(H)</math>,它取决于 <math>\textstyle H=h(X)</math>, 它取决于随机变量 <math>\textstyle X</math>.。这种视角在[https://en.wikipedia.org/wiki/Graphical_models 图模型]中经常遇到。
这两种视角大部分等价。不论哪种情况,对于这种特定的结构,单独层的组成互相独立(例如,<math>\textstyle g</math> 的组成,给定它们的输入<math>\textstyle h</math>互相独立) 这自然地使实现中的并行成为可能。
这两种视角大部分等价。不论哪种情况,对于这种特定的结构,单独层的组成互相独立(例如,<math>\textstyle g</math> 的组成,给定它们的输入<math>\textstyle h</math>互相独立) 这自然地使实现中的并行成为可能。
[[File:Recurrent_ann_dependency_graph.png|120px|循环ANN依赖图的两个单独描述]]
前述的网络通常称为[https://en.wikipedia.org/wiki/Feedforward_neural_network 前馈神经网络],因为它们的图是[https://en.wikipedia.org/wiki/Directed_acyclic_graph 有向无环图]。带有[https://en.wikipedia.org/wiki/Cycle_(graph_theory) 环]的网络通常称为[https://en.wikipedia.org/wiki/Recurrent_neural_network 循环神经网络]。这种网络通常被图片顶部的方式描述,其中 <math>\textstyle f</math> 依赖它自己,而一个隐含的时间依赖没有显示。
===学习===
===学习===
损失函数<math>\textstyle C</math>是学习中一个重要的概念,因为它是衡量一个特定的解距离一个解决问题的最优解有多远。学习算法搜索解空间寻找一个有最小可能损失的函数。
损失函数<math>\textstyle C</math>是学习中一个重要的概念,因为它是衡量一个特定的解距离一个解决问题的最优解有多远。学习算法搜索解空间寻找一个有最小可能损失的函数。
对于解依赖数据的应用,损失必须必要地作为观测值的函数,否则模型会数据无关。通常定义为一个只能近似的[https://en.wikipedia.org/wiki/Statistic 统计量]。一个简单的例子是考虑找到最小化<math>\textstyle C=E\left[(f(x) - y)^2\right]</math>的模型 <math>\textstyle f</math>,对于数据对<math>\textstyle (x,y)</math> 来自分布<math>\textstyle \mathcal{D}</math>.。在实际情况下我们可能只有 <math>\textstyle N</math>从 <math>\textstyle \mathcal{D}</math>采样,这样,对于上面的例子我们只能最小化 <math>\textstyle \hat{C}=\frac{1}{N}\sum_{i=1}^N (f(x_i)-y_i)^2</math>. 因此,损失被在数据的一个样本上而不是在整个分布上最小化。
当 <math>\textstyle N \rightarrow \infty</math>,必须使用【在线机器学习】的某种形式 ,其中损失随着每次观测到新的样本而减小。尽管通常当<math>\textstyle \mathcal{D}</math>固定时使用在线机器学习,它在分布随时间缓慢变化时最有用。在神经网络方法中,一些种类的在线机器学习通常被用于无限数据集。
当 <math>\textstyle N \rightarrow \infty</math>,必须使用【在线机器学习】的某种形式 ,其中损失随着每次观测到新的样本而减小。尽管通常当<math>\textstyle \mathcal{D}</math>固定时使用在线机器学习,它在分布随时间缓慢变化时最有用。在神经网络方法中,一些种类的在线机器学习通常被用于无限数据集。
* 【Levenberg-Marquardt】和【共轭梯度】(Fletcher-Reeves 更新, Polak-Ribiére 更新, Powell-Beale 重启,标度共轭梯度)。
* 【Levenberg-Marquardt】和【共轭梯度】(Fletcher-Reeves 更新, Polak-Ribiére 更新, Powell-Beale 重启,标度共轭梯度)。
【进化法】,【基因表达式编程】,【模拟退火】,【期望最大化】,【非参数方法】和【粒子群算法】是训练神经网络的其他方法。
【进化法】,【基因表达式编程】,【模拟退火】,【期望最大化】,【非参数方法】和【粒子群算法】是训练神经网络的其他方法。
== 变体 ==
== 变体 ==
=== 数据处理的群方法(Group method of data handling) ===
=== 数据处理的群方法(Group method of data handling) ===