您现在的位置是:主页 > news > 本地企业网站建设/百度推广图片尺寸要求
本地企业网站建设/百度推广图片尺寸要求
admin2025/5/7 6:27:11【news】
简介本地企业网站建设,百度推广图片尺寸要求,产品设计的8个方法,网站群建设规范自己简略的, 有参考黄海广前辈 !黄博士GitHub 第5周 九、神经网络的学习(Neural Networks: Learning) 9.1 代价函数 引入一些便于讨论的标记方法: 假设神经网络训练样本有mmm个,每个包含一组输入xxx和一组输出信号yyy&#x…
自己简略的, 有参考黄海广前辈 !黄博士GitHub
第5周
九、神经网络的学习(Neural Networks: Learning)
9.1 代价函数
引入一些便于讨论的标记方法:
假设神经网络训练样本有mmm个,每个包含一组输入xxx和一组输出信号yyy,LLL表示神经网络层数,SIS_ISI表示每层的neuron个数(SlS_lSl表示输出层神经元个数),SLS_LSL代表最后一层中处理单元的个数。
将神经网络的分类定义两种情况:二类分类和多类分类:
二类分类:SL=1,y=0 or 1S_L=1, y=0\, or\, 1SL=1,y=0or1表示哪一类;
KKK类分类:SL=k,yi=1S_L=k, y_i = 1SL=k,yi=1表示分到第iii类;(k>2)(k>2)(k>2)。
回顾逻辑回归中的代价函数为:
J(θ)=−1m∑i=1m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]+λ2m∑j=1nθj2J\left( \theta \right)=-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]}+\frac{\lambda }{2m}\sum\limits_{j=1}^{n}{\theta _{j}^{2}}J(θ)=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2
逻辑回归中只有一个输出变量,又称标量(scalar),也只有一个因变量yyy,但神经网络中可以有很多输出变量,hθ(x)h_\theta(x)hθ(x)是一个维度为KKK的向量,并且训练集中的因变量也是同样维度的一个向量,因此代价函数会比逻辑回归更加复杂一些,为:
这个复杂的代价函数背后的思想还是一样的,希望通过代价函数来观察算法预测的结果与真实情况的误差有多大,不同的是,对于每行特征,我们都会给出KKK个预测,可以利用循环,对每一行特征都预测KKK个不同结果,然后在利用循环在KKK个预测中选择可能性最高的一个,将其与yyy中的实际数据进行比较。
正则化的那一项只是排除了每一层θ0\theta_0θ0后,每一层的 θ\thetaθ 矩阵的和。最里层的循环 jjj 循环所有的行(由sl+1s_{l+1}sl+1 层的激活单元数决定),循环 iii 则循环所有的列,由该层(sls_lsl层)的激活单元数所决定。即:hθ(x)h_\theta(x)hθ(x)与真实值之间的距离为每个样本-每个类输出的加和,对参数进行regularization的bias项处理所有参数的平方和。
9.2 反向传播算法
为了计算代价函数的偏导数∂∂Θij(l)J(Θ)\frac{\partial}{\partial\Theta^{(l)}_{ij}}J\left(\Theta\right)∂Θij(l)∂J(Θ),需要采用反向传播算法,首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层。
假设训练集只有一个样本(x(1),y(1))\left({x}^{(1)},{y}^{(1)}\right)(x(1),y(1)),神经网络是一个四层的神经网络,其中K=4,SL=4,L=4K=4,S_{L}=4,L=4K=4,SL=4,L=4:
前向传播算法:
下面的公式推导过程见:https://blog.csdn.net/qq_29762941/article/details/80343185
我们从最后一层误差开始计算,误差是激活单元的预测(a(4){a^{(4)}}a(4))与实际值(yky^kyk)之间的误差,(k=1:kk=1:kk=1:k)。
用δ\deltaδ来表示误差,则:δ(4)=a(4)−y\delta^{(4)}=a^{(4)}-yδ(4)=a(4)−y
利用这个误差值来计算前一层的误差:δ(3)=(Θ(3))Tδ(4)∗g′(z(3))\delta^{(3)}=\left({\Theta^{(3)}}\right)^{T}\delta^{(4)}\ast g'\left(z^{(3)}\right)δ(3)=(Θ(3))Tδ(4)∗g′(z(3))
其中 g′(z(3))g'(z^{(3)})g′(z(3))是 SSS 形函数的导数,g′(z(3))=a(3)∗(1−a(3))g'(z^{(3)})=a^{(3)}\ast(1-a^{(3)})g′(z(3))=a(3)∗(1−a(3))。而(θ(3))Tδ(4)(θ^{(3)})^{T}\delta^{(4)}(θ(3))Tδ(4)则是权重导致的误差的和。下一步是继续计算第二层的误差:
δ(2)=(Θ(2))Tδ(3)∗g′(z(2))\delta^{(2)}=(\Theta^{(2)})^{T}\delta^{(3)}\ast g'(z^{(2)})δ(2)=(Θ(2))Tδ(3)∗g′(z(2))
第一层是输入变量,不存在误差。有了所有误差的表达式后,便可以计算代价函数的偏导数了,假设λ=0λ=0λ=0,即我们不做任何正则化处理时有:
∂∂Θij(l)J(Θ)=aj(l)δil+1\frac{\partial}{\partial\Theta_{ij}^{(l)}}J(\Theta)=a_{j}^{(l)} \delta_{i}^{l+1}∂Θij(l)∂J(Θ)=aj(l)δil+1
重要的是清楚地知道上面式子中上下标的含义:
lll 代表目前所计算的是第几层。
jjj 代表目前计算层中的激活单元的下标,也将是下一层的第jjj个输入变量的下标。
iii 代表下一层中误差单元的下标,是受到权重矩阵中第iii行影响的下一层中的误差单元的下标。
如果考虑正则化处理,并且训练集是一个特征矩阵而非向量。在上面的特殊情况中,需要计算每一层的误差单元来计算代价函数的偏导数。更为一般的情况中,同样需要计算每一层的误差单元,但是我们需要为整个训练集计算误差单元,此时的误差单元也是一个矩阵,我们用Δij(l)\Delta^{(l)}_{ij}Δij(l)来表示这个误差矩阵。第 lll 层的第 iii 个激活单元受到第 jjj 个参数影响而导致的误差。
算法表示为:
即首先用正向传播方法计算出每一层的激活单元,利用训练集的结果与神经网络预测的结果求出最后一层的误差,然后利用该误差运用反向传播法计算出直至第二层的所有误差。
在求出了Δij(l)\Delta_{ij}^{(l)}Δij(l)之后,我们便可以计算代价函数的偏导数了,计算方法如下:
Dij(l):=1mΔij(l)+λΘij(l)D_{ij}^{(l)} :=\frac{1}{m}\Delta_{ij}^{(l)}+\lambda\Theta_{ij}^{(l)}Dij(l):=m1Δij(l)+λΘij(l) if  j≠0{if}\; j \neq 0ifj̸=0
Dij(l):=1mΔij(l)D_{ij}^{(l)} :=\frac{1}{m}\Delta_{ij}^{(l)}Dij(l):=m1Δij(l) if  j=0{if}\; j = 0ifj=0
9.3 反向传播算法的直观理解
反向传播算法做的是:
感悟:上图中的 δj(l)="error"ofcostforaj(l)(unitjinlayerl)\delta^{(l)}_{j}="error" \ of cost \ for \ a^{(l)}_{j} \ (unit \ j \ in \ layer \ l)δj(l)="error" ofcost for aj(l) (unit j in layer l) 理解如下:
δj(l)\delta^{(l)}_{j}δj(l) 相当于是第 lll 层的第 jjj 单元中得到的激活项的“误差”,即”正确“的 aj(l)a^{(l)}_{j}aj(l) 与计算得到的 aj(l)a^{(l)}_{j}aj(l) 的差。
而 aj(l)=g(z(l))a^{(l)}_{j}=g(z^{(l)})aj(l)=g(z(l)) ,(g为sigmoid函数)。我们可以想象 δj(l)\delta^{(l)}_{j}δj(l) 为函数求导时迈出的那一丁点微分,所以更准确的说 δj(l)=∂∂zj(l)cost(i)\delta^{(l)}_{j}=\frac{\partial}{\partial z^{(l)}_{j}}cost(i)δj(l)=∂zj(l)∂cost(i)
9.4 实现注意:展开参数
介绍一个细节的实现过程,怎样把参数从矩阵展开成向量,以便在高级最优化步骤中使用:
9.5 梯度检验
对一个复杂的模型(例如神经网络)使用梯度下降算法时,可能会存在一些不容易察觉的错误,虽然代价在不断减小,但最终的结果可能并不是最优解。
为了避免这样的问题,可以采取一种叫做梯度的数值检验(Numerical Gradient Checking)方法。思想是通过估计梯度值来检验计算的导数值是否真的符合要求。
梯度估计采用的方法是在代价函数上沿着切线的方向选择两个非常近的点然后计算两个点的平均值用以估计梯度。即对于某个特定的 θ\thetaθ,我们计算出在 θ\thetaθ-ε\varepsilonε 处和 θ\thetaθ+ε\varepsilonε 的代价值(ε\varepsilonε是一个非常小的值,通常选取 0.001),然后求两个代价的平均,用以估计 θ\thetaθ 处的代价值。
当θ\thetaθ是一个向量时,则需要对偏导数进行检验。因为代价函数的偏导数检验只针对一个参数的改变进行检验,下面是一个只针对θ1\theta_1θ1进行检验的示例:
∂∂θ1=J(θ1+ε1,θ2,θ3...θn)−J(θ1−ε1,θ2,θ3...θn)2ε\frac{\partial}{\partial\theta_1}=\frac{J\left(\theta_1+\varepsilon_1,\theta_2,\theta_3...\theta_n \right)-J \left( \theta_1-\varepsilon_1,\theta_2,\theta_3...\theta_n \right)}{2\varepsilon} ∂θ1∂=2εJ(θ1+ε1,θ2,θ3...θn)−J(θ1−ε1,θ2,θ3...θn)
最后还需要对通过反向传播方法计算出的偏导数进行检验。
根据上面的算法,计算出的偏导数存储在矩阵 Dij(l)D_{ij}^{(l)}Dij(l) 中。检验时,将该矩阵展开成为向量,同时我们也将 θ\thetaθ 矩阵展开为向量,针对每一个 θ\thetaθ 都计算近似的梯度值,将这些值存储于一个近似梯度矩阵中,最终将得出的这个矩阵同 Dij(l)D_{ij}^{(l)}Dij(l) 进行比较。
9.6 随机初始化
任何优化算法都需要一些初始的参数。目前为止我们初始所有参数为0,这对于逻辑回归来说可行,但是对于神经网络来说不可行。如果令所有的初始参数都为0,这将意味着我们第二层的所有激活单元都会有相同的值。同理,如果初始所有的参数都为一个非0的数,结果也是一样的。
通常初始参数为正负ε之间的随机值,假设要随机初始一个尺寸为10×11的参数矩阵,代码如下:
Theta1 = rand(10, 11) * (2*eps) – eps
9.7 综合起来
小结使用神经网络时的步骤:
网络结构:第一件要做的事是选择网络结构,即决定选择多少层以及决定每层分别有多少个单元。
第一层的单元数即我们训练集的特征数量。
最后一层的单元数是我们训练集的结果的类的数量。
如果隐藏层数大于1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。
我们真正要决定的是隐藏层的层数和每个中间层的单元数。
训练神经网络:
-
参数的随机初始化
-
利用正向传播方法计算所有的hθ(x)h_{\theta}(x)hθ(x)
-
编写计算代价函数 JJJ 的代码
-
利用反向传播方法计算所有偏导数
-
利用数值检验方法检验这些偏导数
-
使用优化算法来最小化代价函数