[ufldl]Supervised Neural Networks

本文详细介绍了神经网络中的前向传播过程,包括输入层、隐藏层及输出层的数据流动,并深入探讨了softmax函数的成本函数计算方法。此外,还讲解了如何利用反向传播算法来高效计算每一层的梯度,以及如何加入正则化项来避免过拟合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要实现的部分为:forward prop, softmax函数的cost function,每一层的gradient,以及penalty cost和gradient。

  • forwad prop

forward prop是输入sample data,使sample data通过神经网络后得到神经网络输出的过程。

以分类问题来说,不同层的输入和输出如下表所示:

输入输出
输入层sample datafeature map
隐藏层feature mapfeature map
输出层feature mapprobabilities of each potential class

 

 

 

所以输入层的输出是sigmoid(W1X+b1),隐藏层的输出是sigmoid(Wlzl-1+bl),而输出层的输出是最终的概率:exp(Wz+b)。代码如下

 1 %% forward prop
 2 %%% YOUR CODE HERE %%%
 3 %隐藏层
 4 
 5 for l = 1:numHidden
 6     if(l == 1)
 7         z = stack{l}.W * data;
 8     else
 9         z = stack{l}.W * hAct{l-1};
10     end
11     z = bsxfun(@plus,z,stack{l}.b);%%z:256*60000 b:256*1
12     hAct{l} = 1./(1+exp(-z));
13 end
14 %输出层
15 h  = exp(bsxfun(@plus,stack{numHidden+1}.W * hAct{numHidden},stack{numHidden+1}.b));
16 pred_prob = bsxfun(@rdivide,h,sum(h,1));
17 hAct{numHidden+1} = pred_prob;%最后一层输出的实际上是预测的分类结果
  • softmax函数的cost function

这一步和之前的softmax差别在教程中说的很清楚了:“Note that instead of making predictions from the input data x the softmax function takes as input the final hidden layer of the network”。即分类器的输入不是input data,而是最后一层隐藏层输出的feature map,所以softmax函数的cost function如下:

红框中的h就是输出层输出的概率向量pred_prob。代码如下,细节课参见原始的softmax

1 %% compute cost计算softmax函数的损失函数
2 %%% YOUR CODE HERE %%%
3 logp = log2(pred_prob);
4 index = sub2ind(size(logp),labels',1:size(pred_prob,2));
5 ceCost = -sum(logp(index));
  • 计算每一层的gradient

BP(BackPropagation)算法方便的计算了每一层的对应的梯度

其中a是l层的激励(wx+b),δ是每一层的error。

这个公式个人认为有问题,正确的公式应该是:

也就是说l层的W由l-1层的激励和l层的error得到,而不是上述l层的激励和l+1层的error。同样的,cost function对b的导数也应该由下述公式得到:

即由l层的error得到,而不是l+1层的error得到。后面代码实现的时候也是根据这两个公式。

也有可能是我理解错了,欢迎大神指出~详细的推倒过程可以参见这里

对于输出层,我们很容易用groun_truth_label - output的方式计算error,而对于隐藏层,则要用下面的公式计算error:

δ= Wδl+1 * f'(zl)

其中z是wx+b,f是sigmoid函数,这个函数有一个很好的性质就是:f'(x) = f(x) * (1-f(x)), 计算起来非常方便。代码如下:

 1 %% compute gradients using backpropagation
 2 
 3 %%% YOUR CODE HERE %%%
 4 %输出层
 5 output = zeros(size(pred_prob));
 6 output(index) = 1;
 7 error = pred_prob - output;
 8 
 9 for l = numHidden+1 : -1 :1
10     gradStack{l}.b = sum(error,2);
11     if(l == 1)
12         gradStack{l}.W = error * data';
13         break;
14     else
15         gradStack{l}.W = error * hAct{l-1}';
16     end
17     error = (stack{l}.W)'*error .* hAct{l-1} .* (1-hAct{l-1});%此处的error对应是l-1层的error
18 end
  • 计算penalty cost和gradient

这里主要是为了防止过拟合,所以对w加了一个正则项。最终的cost function由误差和对w约束的正则项共同组成,cost function对w的导数中也多了一项正则项对w的求导,代码如下:

%% compute weight penalty cost and gradient for non-bias terms
%%% YOUR CODE HERE %%%
%penalty cost
wCost = 0;
for l = 1:numHidden+1
    wCost = wCost + 0.5*ei.lambda * sum(stack{l}.W(:) .^ 2);
end
cost = ceCost + wCost;

%gradient for non-bias terms
for l = numHidden:-1:1
    gradStack{l}.W = gradStack{l}.W + ei.lambda * stack{l}.W;
end

参考资料:

[1]http://neuralnetworksanddeeplearning.com/chap2.html

[2]http://ufldl.stanford.edu/tutorial/supervised/MultiLayerNeuralNetworks/

[3]http://blog.youkuaiyun.com/lingerlanlan/article/details/38464317

转载于:https://www.cnblogs.com/sunshineatnoon/p/4528803.html

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值