Sparse Autoencoder学习笔记
来源:互联网 发布:python数据建模 编辑:程序博客网 时间:2024/05/22 10:46
神经网络是监督学习,自编码算法是非监督学习,只有没有标签的训练样本集
稀疏自编码是指在隐藏节点层加一个稀疏约束。如果一个神经元的输出值接近1则它是
定义第二层的隐藏节点
稀疏约束是令
KL散度是描述两种不同的分布的差异程度。当
现在,损失函数是
将稀疏约束惩罚项(KL散度)融合到BP算法中只在第三步有一个小改变。
反向传播算法可表示为以下几个步骤:
1、进行前馈传导计算,利用前向传导公式,得到
2、对输出层(第
3、对于
4、计算最终需要的偏导数值:
以含有一层隐藏层的自编码器为例,理解稀疏惩罚项。代码来自Deep learning:九(Sparse Autoencoder练习)中的sparseAutoencoderCost.m
%前向算法计算各神经网络节点的线性组合值和active值z2 = W1*data+repmat(b1,1,m);%注意这里一定要将b1向量复制扩展成m列的矩阵a2 = sigmoid(z2);z3 = W2*a2+repmat(b2,1,m);a3 = sigmoid(z3);% 计算预测产生的误差Jcost = (0.5/m)*sum(sum((a3-data).^2));%计算权值惩罚项Jweight = (1/2)*(sum(sum(W1.^2))+sum(sum(W2.^2)));%计算稀释性规则项rho = (1/m).*sum(a2,2);%求出第一个隐含层的平均值向量,即rho_hatJsparse = sum(sparsityParam.*log(sparsityParam./rho)+ ... (1-sparsityParam).*log((1-sparsityParam)./(1-rho)));%稀疏惩罚项(KL散度)%损失函数的总表达式cost = Jcost+lambda*Jweight+beta*Jsparse;%反向算法求出每个节点的误差值d3 = -(data-a3).*sigmoidInv(z3);%最后一层的残差sterm = beta*(-sparsityParam./rho+(1-sparsityParam)./(1-rho));d2 = (W2'*d3+repmat(sterm,1,m)).*sigmoidInv(z2); %倒数第二层的残差,因为加入了稀疏规则项,所以计算偏导时需要引入sterm%计算W1grad W1grad = W1grad+d2*data';W1grad = (1/m)*W1grad+lambda*W1;%计算W2grad W2grad = W2grad+d3*a2';W2grad = (1/m).*W2grad+lambda*W2;%计算b1grad b1grad = b1grad+sum(d2,2);b1grad = (1/m)*b1grad;%注意b的偏导是一个向量,所以这里应该把每一行的值累加起来%计算b2grad b2grad = b2grad+sum(d3,2);b2grad = (1/m)*b2grad;grad = [W1grad(:) ; W2grad(:) ; b1grad(:) ; b2grad(:)];function sigm = sigmoid(x) sigm = 1 ./ (1 + exp(-x));end%sigmoid函数的逆向求导函数function sigmInv = sigmoidInv(x) sigmInv = sigmoid(x).*(1-sigmoid(x));end
参考文献:
CS294A Lecture notes
Deep learning:九(Sparse Autoencoder练习)
0 0
- Sparse Autoencoder学习笔记
- UFLDL学习笔记1(Sparse Autoencoder)
- Sparse Autoencoder学习总结
- sparse-autoencoder
- Sparse Autoencoder
- DL:Sparse autoencoder之初步学习参考资料
- 《深度学习》学习笔记(一):稀疏自编码器(Sparse Autoencoder)
- UFLDL 学习笔记——稀疏自动编码机(sparse autoencoder)
- Autoencoder ,Sparse Coding ,Sparse autoencoder 简介
- Deeplearning学习之路_第一章(Sparse Autoencoder)
- 深度学习(二)sparse autoencoder的Python实现
- UFLDL练习(Sparse Autoencoder)
- Deep learning:(Sparse Autoencoder)
- Sparse AutoEncoder (1)
- UFLDL Exercise:Sparse Autoencoder
- UFLDL Exercise:Sparse Autoencoder
- UFLDL Exercise:Sparse Autoencoder
- Sparse Autoencoder Exercise
- NOIP2011Mayan 游戏
- C++三大特性之多态(二)---深度剖析各种虚继承虚函数以及虚表的内容存放
- Java并发多线程面试题 Top 50
- 边框圆角
- 1677: [Usaco2005 Jan]Sumsets 求和
- Sparse Autoencoder学习笔记
- 一些面试题3.0
- NOIP2011计算系数
- 奇异值分解(SVD) --- 几何意义
- Android开发中高效的数据结构用SparseArray代替HashMap
- laravel ORM CURD 操作,连贯操作
- 解决 eclipse 自动补齐变量名时加上类型后缀的问题
- 写给小白大师子的简单系统安装教程
- MyEclipse快捷键大全(绝对全)