内容来自ufldl,代码参考自tornadomeet的cnnCost.m

1.Forward Propagation

convolvedFeatures = cnnConvolve(filterDim, numFilters, images, Wc, bc); %对于第一个箭头
activationsPooled = cnnPool(poolDim, convolvedFeatures);%对应第二个箭头 %对应第3个箭头,即平铺开
activationsPooled = reshape(activationsPooled,[],numImages); %开始计算softmax后属于各类的概率
probs = zeros(numClasses,numImages); %Wd=(numClasses,hiddenSize),probs的每一列代表一个输出
%M=Wd*ah+bd
M = Wd*activationsPooled+repmat(bd,[1,numImages]);
%这步可以省略,可以这么做的原因是 exp(a+b)=exp(a)exp(b)
M = bsxfun(@minus,M,max(M,[],1));
%M=exp(Wd*ah+bd)
M = exp(M);
%normalize
probs = bsxfun(@rdivide, M, sum(M));

2.Back propagation

% 首先需要把labels弄成one-hot编码
%对应图片中的I
groundTruth = full(sparse(labels, 1:numImages, 1)); %P-I
delta_d = -(groundTruth-probs);
%ah(P-I) ,不同处为后面加上了正规项的导数
Wd_grad = (1./numImages)*delta_d*activationsPooled'+lambda*Wd;
bd_grad = (1./numImages)*sum(delta_d,2); %注意这里是要求和 %对应图中reshape右边的 J对ah求导
delta_s = Wd'*delta_d;
delta_s=reshape(delta_s,outputDim,outputDim,numFilters,numImages); %对应途中 1/4,delta_s的每个分量,都扩展为4个
for i=1:numImages
for j=1:numFilters
delta_c(:,:,j,i) = (1./poolDim^2)*kron(squeeze(delta_s(:,:,j,i)), ones(poolDim));
end
end
%对于左下方,但此时ximage还没有乘上去
delta_c = convolvedFeatures.*(1-convolvedFeatures).*delta_c; for i=1:numFilters
Wc_i = zeros(filterDim,filterDim);
for j=1:numImages
%此处conv2非常巧妙
Wc_i = Wc_i+conv2(squeeze(images(:,:,j)),rot90(squeeze(delta_c(:,:,i,j)),2),'valid');
end
% Wc_i = convn(images,rot180(squeeze(delta_c(:,:,i,:))),'valid');
% add penalize
Wc_grad(:,:,i) = (1./numImages)*Wc_i+lambda*Wc(:,:,i); bc_i = delta_c(:,:,i,:);
bc_i = bc_i(:);
bc_grad(i) = sum(bc_i)/numImages;
end

上面conv2的正确性,可以用下面方法验证

A=rand(9,9);
B=rand(3,3);
c1=conv2(A,B,'valid'); B=zeros(3);
for i=1:7
for j=1:7
B=B+(A(i:i+2,j:j+2)*c1(i,j));
end
end
%看到B和conv2结果相同
conv2(A,rot90(c1,2),'valid')
B

cnn softmax regression bp求导的更多相关文章

  1. 【机器学习基础】对 softmax 和 cross-entropy 求导

    目录 符号定义 对 softmax 求导 对 cross-entropy 求导 对 softmax 和 cross-entropy 一起求导 References 在论文中看到对 softmax 和 ...

  2. 【机器学习】BP & softmax求导

    目录 一.BP原理及求导 二.softmax及求导 一.BP 1.为什么沿梯度方向是上升最快方向     根据泰勒公式对f(x)在x0处展开,得到f(x) ~ f(x0) + f'(x0)(x-x0) ...

  3. softmax 损失函数求导过程

    前言:softmax中的求导包含矩阵与向量的求导关系,记录的目的是为了回顾. 下图为利用softmax对样本进行k分类的问题,其损失函数的表达式为结构风险,第二项是模型结构的正则化项. 首先,每个qu ...

  4. 【转载】softmax的log似然代价函数(求导过程)

    全文转载自:softmax的log似然代价函数(公式求导) 在人工神经网络(ANN)中,Softmax通常被用作输出层的激活函数.这不仅是因为它的效果好,而且因为它使得ANN的输出值更易于理解.同时, ...

  5. Deep learning:五十一(CNN的反向求导及练习)

    前言: CNN作为DL中最成功的模型之一,有必要对其更进一步研究它.虽然在前面的博文Stacked CNN简单介绍中有大概介绍过CNN的使用,不过那是有个前提的:CNN中的参数必须已提前学习好.而本文 ...

  6. Deep Learning基础--CNN的反向求导及练习

    前言: CNN作为DL中最成功的模型之一,有必要对其更进一步研究它.虽然在前面的博文Stacked CNN简单介绍中有大概介绍过CNN的使用,不过那是有个前提的:CNN中的参数必须已提前学习好.而本文 ...

  7. softmax分类器+cross entropy损失函数的求导

    softmax是logisitic regression在多酚类问题上的推广,\(W=[w_1,w_2,...,w_c]\)为各个类的权重因子,\(b\)为各类的门槛值.不要想象成超平面,否则很难理解 ...

  8. 前馈网络求导概论(一)·Softmax篇

    Softmax是啥? Hopfield网络的能量观点 1982年的Hopfiled网络首次将统计物理学的能量观点引入到神经网络中, 将神经网络的全局最小值求解,近似认为是求解热力学系统的能量最低点(最 ...

  9. Deep Learning基础--Softmax求导过程

    一.softmax函数 softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类! 假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个 ...

随机推荐

  1. codeforces 519C.. A and B and Team Training

    C. A and B and Team Training time limit per test 1 second memory limit per test 256 megabytes input ...

  2. UVA 120 Stacks of Flapjacks

    每次从最底部开始处理,如果不是最大值,则把最大值翻到底部.这就是最优解.原理自己模拟一下就好... 注意半径不是从1开始.数据处理要仔细. #include <iostream> #inc ...

  3. codec ruby和json格式输出

    zjtest7-frontend:/usr/local/logstash-2.3.4/config# cat geoip.conf input {stdin {} } filter { geoip { ...

  4. Java泛型介绍!!!

    Java总结篇系列:Java泛型  转自:http://www.cnblogs.com/lwbqqyumidi/p/3837629.html 一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下 ...

  5. VMware网络模式介绍(下篇)

    VMware网络模式介绍 VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式). Bridged 模式: 在桥接模式下,VMwa ...

  6. 【LeetCode练习题】Next Permutation

    Next Permutation Implement next permutation, which rearranges numbers into the lexicographically nex ...

  7. #include <boost/scoped_array.hpp>

    多个元素使用#include <boost/scoped_array.hpp> 单个元素使用#include <boost/scoped_ptr.hpp> 作用域数组 作用域数 ...

  8. 学用 ASP.Net 之 System.Math 类

    本文来自:http://www.cnblogs.com/del/archive/2011/01/03/1924746.html   成员: /* 字段 */ Math.E;      //2.7182 ...

  9. flex 载入GIF图片

    李石磊 学习日记 一.下载GIFPlayer包 二.源代码例如以下: <?xml version="1.0" encoding="utf-8"?> ...

  10. InterLockedIncrement and InterLockedDecrement函数原理

    实现数的原子性加减. 什么是原子性的加减呢? 举个样例:假设一个变量 Long value =0; 首先说一下正常情况下的加减操作:value+=1. 1:系统从Value的空间取出值,并动态生成一个 ...