启发式算法,和图论还没有更新,我又来写神经网络了。以我浅薄的理解,简单介绍下,神经网络的入门。
神经网络的构成:从层级结构上讲,分为输入层,隐藏层和输出层。
细化结构:包含了神经元,神经元之间连接方式。
神经元结构:
在神经网络中,神经元接受输入并通过加权求和,经过激活函数得到输出。神经网络是要找到合适的权值,使得预测结果和真实结果之间的误差最小。权重矩阵,在网络训练的过程中是可学习的,也就是可以不断更改的。激活函数有:sgn,sigmoid,relu等。
另一种比较特殊的节点是—偏置节点。它的值永远是1,除了输出层中,其余层结构中,都含有偏置节点。
权值的更新,可以通过反向传播。接下来,举个例子介绍下前向和反向传播的流程,暂时不考虑偏置节点。)一个简单的三层神经网络,输入层,隐藏层,输出层。如上图:
前向传播:输入层由向量表示,a(1)=[x1,x2,x3].。对于隐藏层最上面的神经元来说,输入层神经元都与它相连接,权重表示为W(1)=[w1,w2,w3]。激活函数采用sigmoid。此时,输出表示为:a(2)=sigmoid(a(1)*W(1)+b(1))。其余节点类似的,完成前向传播。最终在输出层得到输出结果。两层的神经网络,已经可以解决了非线性分类任务。
接着,是反向传播。目的在于:更新网络中的参数,也就是进行权重更新。首先,定义误差loss=(y_pre-y)^2。而y_pre是权重的函数,因此,loss是权重的函数,此时的问题,也就是寻找一组参数,使得loss的取值最小。简单的说,求导。但是,不适用于复杂的函数。因此,有了耳熟能详的经典算法-梯度下降算法。每次,沿着梯度的反方向更新参数。因此,反向传播指的是:首先计算输出层的梯度,接着计算前一层的梯度,直到计算到输入层的梯度。其中的关键,是链式求导法则。
上面的过程,是训练过程。对于测试阶段,为了防止过拟合,也就提出了泛化,可以采用的有:正则化等手段。