1、训练集 D = { ( x ⃗ 1 , y ⃗ 1 ) , ( x ⃗ 2 , y ⃗ 2 ) , . . . , ( x ⃗ m , y ⃗ m ) } D = \{(\vec{x}_1, \vec{y}_1), (\vec{x}_2, \vec{y}_2),..., (\vec{x}_m, \vec{y}_m)\} D={(x1,y1),(x2,y2),...,(xm,ym)},共m个样例
2、 x ⃗ i ∈ R d , y ⃗ i ∈ R d \vec{x}_i \in \mathbb{R}^d, \vec{y}_i \in \mathbb{R}^d xi∈Rd,yi∈Rd:输入样本由 d d d个属性描述,输出 l l l维( l l l个属性描述)实值向量 y ⃗ i \vec{y}_i yi
3、对应图中的神经网络
4、连接权都如图所示
6、阈值:每个神经元都有自己的阈值
7、第x个神经元的输入:FNN都是全连接,因此要求和
1、训练样例 ( x ⃗ k , y ⃗ k ) (\vec{x}_k, \vec{y}_k) (xk,yk)
2、其经过神经网络的 l l l个输出记为 y ⃗ ^ k = ( y 1 ^ k , y 2 ^ k , . . . , y l ^ k ) \hat{\vec{y}}_k = (\hat{y_1}^k,\hat{y_2}^k, ...,\hat{y_l}^k ) y^k=(y1^k,y2^k,...,yl^k),其中每个输出:
3、则对于这一个训练样例 ( x ⃗ k , y ⃗ k ) (\vec{x}_k, \vec{y}_k) (xk,yk),网络的均方误差为:
梯度是有方向的:曲面上方向导数的最大值的方向就代表了梯度的方向
因此每次规定的步长 η \eta η固定,我们的参数就要朝着该参数对应函数梯度的方向(变化最快,如山最陡峭的方向)变化,才能让损失函数值最快地往极小值收敛。
理解:假设你初始在山顶,步长5m,朝着梯度最大(最陡峭的)方向,走5m(也就是当前点的梯度值*步长),能垂直距离下降4m,非最陡峭方向一次则垂直距离下降更少。
批量梯度下降:
如图代码就是使用批量梯度下降,重复了iters次数,每一次所有样本参与对权值 θ ⃗ \vec{\theta} θ中的每个分量 θ j \theta_j θj进行更新。那个np.sum
随机梯度下降:
用样本中的一个随机选取的样本 x ⃗ i \vec{x}_i xi来近似我所有的样本,来调整θ
单独一条隐含层到输出层的连接权w只影响一个y,因此对其求偏导,无需求和。
但是输入层到隐含层的连接权v,即使是一条,也会影响所有的y。
看图中的连线即可知道。则其实从隐含层的神经元b开始,之后所有的参数,一个都会影响所有的y。故链式法则求偏导时要加上求和符号。