[机器学习] UFLDL笔记 - ICA(Independent Component Analysis)(Code)

引言

 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归、逻辑回归、Softmax回归、神经网络和SVM等等,主要学习资料来自Standford Ag老师的教程,同时也查阅并参考了大量网上的相关资料(在后面列出)。

 本文主要记录我在学习ICA(独立成分分析)过程中的心得笔记,对于ICA模型的理解和疑问,也纠正网络上一些Tutorial、资料和博文中的错误,欢迎大家一起讨论。
 全文共分为两个部分:
 Representation:ICA的模型描述
 Code:ICA的代码实现

前言

 本文主要介绍ICA的训练过程、代码以及实验结果(对应UFLDL的课后练习),源自于我在学习ICA过程中的笔记资料,包括了我个人对ICA模型的理解和代码实现,引用部分我都会标注出来,文章小节安排如下:
 1)实验基础
 2)实验结果
 3)实验代码
 4)参考资料
 5)结语

 关于ICA模型的基础知识可以参考:
 [机器学习] 笔记 - ICA(Independent Component Analysis)(Representation)
 

实验基础

 实验主要是基于UFLDL Tutorial中ICA部分的练习:Exercise:Independent Component Analysis,大家可以先参考该练习自己尝试完成实验。
 实验数据:STL-10 dataset

 ICA的目标函数:
 
 ICA的目标函数

 通过使用近似值“平滑” L1 范数,将ICA模型如下,
 标准正交ICA的目标函数
 
 标准正交ICA的目标函数
 
 标准正交ICA的目标函数对W的梯度
 标准正交ICA的目标函数对W的梯度

注意事项:
(1)基底线性独立
 因为要学习到一组标准正交基,所以基向量的个数必须小于输入数据的维度。

(2)正交化
 注意一点,正交化通过来完成,其实现为:
 这里写图片描述
 而不是
 这里写图片描述

(3)白化
 对于标准正交ICA,样本数据必须经过无正则 ZCA 白化,即 ε 设为 0。

(4)均值化
 代价值和梯度必须除以样本数。

实验结果

(1)优化过程中采用Batch gradient descent,即梯度下降中利用全样本计算代价值及梯度
>>迭代输出:

 Iteration         Cost        time
   1000        0.599483      62.35046
   2000        0.579602      158.1045
   3000        0.567833      222.5326
   4000        0.560265      287.4616
   5000        0.554130      349.7853
   ………………………………………………
  16000        0.513359      1051.224
  17000        0.511163      1115.36
  18000        0.509213      1178.468
  19000        0.507456      1242.144
  20000        0.505815      1305.169
   ………………………………………………
  36000        0.493431      2337.619
  37000        0.493253      2401.839
  38000        0.493097      2466.276
  39000        0.492961      2531.151
  40000        0.492841      2594.416
   ………………………………………………
  46000        0.492322      2980.948
  47000        0.492257      3044.261
  48000        0.492197      3107.959
  49000        0.492144      3172.782
  50000        0.492096      3237.636

>>可视化:
迭代次数=10000

迭代次数=20000

迭代次数=30000

迭代次数=40000

迭代次数=50000

(2)优化过程中采用Mini-Batch Gradient Descent,即梯度下降中利用随机小批量样本计算代价值及梯度
>>迭代输出:
Iteration Cost t time
1000 0.609892 10.68158 4.643359
2000 0.587216 11.39067 9.270881
3000 0.576038 13.49648 13.96519
4000 0.550711 15.99159 18.70056
5000 0.559629 18.94798 23.6164
……………………………………………………………………
16000 0.454444 14.88662 79.16564
17000 0.492942 15.87485 84.36821
18000 0.491434 16.92869 89.44777
19000 0.467292 16.24724 94.3471
20000 0.496667 15.59322 99.20195
……………………………………………………………………
26000 0.481736 13.54037 138.9745
27000 0.508776 14.43924 144.397
28000 0.462674 15.39777 149.7803
29000 0.524727 11.97014 155.0663
30000 0.480356 12.76477 160.018
……………………………………………………………………
36000 0.500814 15.20478 190.5871
37000 0.470674 13.13345 195.8069
38000 0.481720 14.0053 200.8657
39000 0.501621 12.09737 205.682
40000 0.536511 15.92648 210.5624
……………………………………………………………………
46000 0.478799 12.44678 240.977
47000 0.487278 14.74783 246.0048
48000 0.465347 14.15417 250.7841
49000 0.493228 13.5844 255.54
50000 0.495050 14.48619 260.2548

可视化:

分析
采用Mini-Batch Gradient Descent 可以在保证训练效果的同时,显著加快训练速度。

采用Batch Gradient Descent和Mini-Batch Gradient Descent的最终效果对比如下:
    VS    

实验代码

在UFLDL - Exercise:Independent Component Analysis 基础上,我分别实现了Batch Gradient Descent和Mini-Batch Gradient Descent,并对参数 alpha 进行调整以实验不同参数下的训练情况。
需要重点说明的是,
第一,我在ICA优化过程中去除了线性搜索部分(代码中的while 1循环),因为我觉得这段线性搜索代码有些问题,因此非常容易陷入死循环。如果有朋友能理解这部分代码实现,务必请留言交流。
第二,在orthonormalICACost函数中添加了一个miniBatchSize参数,用于实现Mini-Batch Gradient Descent。

关于参数设置,
迭代次数 iteration 和 学习率 alpha 的设置对训练速度和效果有直接的影响,对于本文中实现的ICA算法,实验了下面几种设置,
1)alpha = 0.5,iteration = 10000, 20000, 50000
2)alpha = 1.0,iteration = 10000, 20000, 50000
3)alpha = 2.0,iteration = 10000, 20000, 50000
4)alpha = 4.0,iteration = 10000, 20000, 50000
2)alpha = 16.0,iteration = 10000, 20000, 50000
可以发现随着 alpha 的增大,收敛速度越快,基本上 (alpha = 16.0,iteration = 10000) 就可以达到 (alpha = 0.5,iteration = 50000) 的效果。

以下给出代码关键部分的实现:

参考资料

结语

·

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值