UFLDL 学习笔记——稀疏自动编码机(sparse autoencoder)
来源:互联网 发布:音频dsp处理器数据 编辑:程序博客网 时间:2024/05/20 19:29
自动编码机是一种出入层节点数等于输出层节点数的三层神经网络,只有中间一层隐藏层。
与http://blog.csdn.net/scarecrow398966925/article/details/24178931文章中描述的三层网络类似,关于神经网络的前向传到及反向传播训练可以在上述连接的文章中有详细的讲解。自动编码机与之前描述的神经网络不同的是自动编码机要求网络的输出尽量等于输入。即zi尽量等于xi,这样在隐藏层的yi就可以看成是一种输入xi的另一种表现形式,因为yi可以通过一层变换得到近似于xi的zi,所以可以把yi看成是xi的编码。这就是自动编码机的名字的由来。可以通过BP算法训练这个网络,得到输入的一种编码形式。但是有时候我们需要加入一些其他的限制来得到我们需要的更好的结果,比如权重衰减和稀疏限制。
权重衰减的意思是对每条边的权重加上一些约束,防止权重变化过大,产生过拟合。
单个样本的代价函数如下:
在此代价函数上求最小代价,只用梯度下降法就能得到局部最优解,具体梯度的求解可以使用http://blog.csdn.net/scarecrow398966925/article/details/24178931中的推导,只要在
http://blog.csdn.net/itplus/article/details/11449055
本人水平有限,文章有错误的地方欢迎大家指出,有问题也希望大家能够留言交流,一起学习进步
下面是此章的练习部分我的matlab代码,仅供参考
sampleIMAGES.m
for i=1:1:numpatches
imageIndex = unidrnd(10);
startX = unidrnd(505);
startY = unidrnd(505);
patch =IMAGES(startX:startX+7,startY:startY+7,imageIndex);
linePatch = zeros(1,patchsize*patchsize);
for j=1:1:patchsize
linePatch((j-1)*patchsize+1:j*patchsize) = patch(j,:);
end
patches(:,i) = linePatch;
end
computeNumericalGradient.m
[row,col] = size(theta);
EPSILON = 0.0001;
for i = 1:1:row
e = zeros(size(theta));
e(i,:) = 1;
[value1,grad]=J(theta+EPSILON*e);
[value2,grad]=J(theta-EPSILON*e);
numgrad(i,:)=(value1-value2)/(2*EPSILON);
end
sparseAutoencoderCost.m
[row,col] = size(data);
hiddenForward =zeros(hiddenSize,col);
outputForward =zeros(visibleSize,col);
averageActivity =zeros(hiddenSize,1);
hiddenForward =sigmoid(W1*data+repmat(b1,1,col));
outputForward = sigmoid(W2*hiddenForward+repmat(b2,1,col));
averageActivity =sum(hiddenForward,2)/col;
cost = outputForward-data;
cost = cost.*cost;
cost = sum(cost(:))/2/col;
dencyW1 = W1.*W1;
dencyW1 = sum(dencyW1(:))/2;
dencyW2 = W2.*W2;
dencyW2 = sum(dencyW2(:))/2;
cost = cost + lambda*(dencyW1 +dencyW2);
sparseCost =sparsityParam*log(sparsityParam./averageActivity)+(1-sparsityParam)*log((1-sparsityParam)./(1-averageActivity));
cost = cost +beta*sum(sparseCost);
outputErr =-(data-outputForward).*outputForward.*(1-outputForward);
hiddenErr = W2'*outputErr;
sparse =beta*(-sparsityParam./averageActivity +(1-sparsityParam)./(1-averageActivity));
hiddenErr = (hiddenErr +repmat(sparse,1,col)).*hiddenForward.*(1-hiddenForward);
W1grad = hiddenErr*data';
W2grad = outputErr*hiddenForward';
b1grad = sum(hiddenErr,2);
b2grad = sum(outputErr,2);
W1grad = W1grad/col +lambda*W1;
W2grad = W2grad/col +lambda*W2;
b1grad = b1grad/col;
b2grad = b2grad/col;
- UFLDL 学习笔记——稀疏自动编码机(sparse autoencoder)
- UFLDL——Exercise: Sparse Autoencoder 稀疏自动编码
- sparse autoencoder(稀疏自动编码机)
- 稀疏自动编码(Sparse Autoencoder)
- UFLDL学习笔记1(Sparse Autoencoder)
- Sparse Autoencoder 稀疏自动编码
- 稀疏自动编码器 (Sparse Autoencoder)
- UFLDL编程练习——Sparse Autoencoder
- 《深度学习》学习笔记(一):稀疏自编码器(Sparse Autoencoder)
- Sparse Autoencoder学习笔记
- UFLDL教程 Exercise:Sparse Autoencoder(答案)
- UFLDL练习(Sparse Autoencoder)
- UFLDL Exercise:Sparse Autoencoder
- UFLDL Exercise:Sparse Autoencoder
- UFLDL Exercise:Sparse Autoencoder
- 【UFLDL-exercise1-Sparse Autoencoder】
- UFLDL Sparse Autoencoder
- UFLDL练习(Sparse Autoencoder)
- 学习基础的重要性
- SharedPreferences访问与修改记录
- vs2010创建和使用动态链接库(dll)
- 贪吃蛇 by :jackfrued
- Web开发——PHP vs Java
- UFLDL 学习笔记——稀疏自动编码机(sparse autoencoder)
- 并查集—分离集合森林实现
- 微软企业库5.0 支持 MySql
- CentOS 5.6(X64)下编译安装LNMP平台(Nginx1.0.4+PHP5.3.6+Mysql5.5.12)
- 简单易学的机器学习算法——决策树之ID3算法
- Java中Array的常用方法
- 关于 Apple Metal API 的一些想法
- BZOJ 1934: [Shoi2007]Vote 善意的投票
- 转移指令的条件与机器码