-
Notifications
You must be signed in to change notification settings - Fork 0
/
14947523529684.html
executable file
·500 lines (310 loc) · 17.6 KB
/
14947523529684.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>
CS229 学习笔记 Part 1 - 雪地
</title>
<link href="atom.xml" rel="alternate" title="雪地" type="application/atom+xml">
<link rel="stylesheet" href="asset/css/foundation.min.css" />
<link rel="stylesheet" href="asset/css/docs.css" />
<link rel="icon" href="asset/img/favicon.ico" />
<script src="asset/js/vendor/modernizr.js"></script>
<script src="asset/js/vendor/jquery.js"></script>
<script src="asset/highlightjs/highlight.pack.js"></script>
<link href="asset/highlightjs/styles/github.css" media="screen, projection" rel="stylesheet" type="text/css">
<script>hljs.initHighlightingOnLoad();</script>
<script type="text/javascript">
function before_search(){
var searchVal = 'site:yinzo.github.io ' + document.getElementById('search_input').value;
document.getElementById('search_q').value = searchVal;
return true;
}
</script>
</head>
<body class="antialiased hide-extras">
<div class="marketing off-canvas-wrap" data-offcanvas>
<div class="inner-wrap">
<nav class="top-bar docs-bar hide-for-small" data-topbar>
<section class="top-bar-section">
<div class="row">
<div style="position: relative;width:100%;"><div style="position: absolute; width:100%;">
<ul id="main-menu" class="left">
<li id="menu_item_index"><a href="index.html">Blog</a></li>
<li id="menu_item_archives"><a href="archives.html">Archives</a></li>
<li id="menu_item_about"><a href="http://yinz.xyz/">Home</a></li>
</ul>
<ul class="right" id="search-wrap">
<li>
<form target="_blank" onsubmit="return before_search();" action="http://google.com/search" method="get">
<input type="hidden" id="search_q" name="q" value="" />
<input tabindex="1" type="search" id="search_input" placeholder="Search"/>
</form>
</li>
</ul>
</div></div>
</div>
</section>
</nav>
<nav class="tab-bar show-for-small">
<a href="javascript:void(0)" class="left-off-canvas-toggle menu-icon">
<span> 雪地</span>
</a>
</nav>
<aside class="left-off-canvas-menu">
<ul class="off-canvas-list">
<li><a href="index.html">Blog</a></li>
<li><a href="archives.html">Archives</a></li>
<li><a href="http://yinz.xyz/">Home</a></li>
<li><label>Categories</label></li>
<li><a href="Security%20Info.html">Security Info</a></li>
<li><a href="Adversary%20Learning.html">Adversary Learning</a></li>
<li><a href="TCPIP.html">TCP/IP</a></li>
<li><a href="Pattern%20Recognition.html">Pattern Recognition</a></li>
<li><a href="Python.html">Python</a></li>
<li><a href="OS.html">OS</a></li>
<li><a href="Deep%20Learning.html">Deep Learning</a></li>
<li><a href="Machine%20Learning.html">Machine Learning</a></li>
</ul>
</aside>
<a class="exit-off-canvas" href="#"></a>
<section id="main-content" role="main" class="scroll-container">
<script type="text/javascript">
$(function(){
$('#menu_item_index').addClass('is_active');
});
</script>
<div class="row">
<div class="large-8 medium-8 columns">
<div class="markdown-body article-wrap">
<div class="article">
<h1>CS229 学习笔记 Part 1</h1>
<div class="read-more clearfix">
<span class="date">2017/5/14 16:59 下午</span>
<span>posted in </span>
<span class="posted-in"><a href='Machine%20Learning.html'>Machine Learning</a></span>
<span class="comments">
</span>
</div>
</div><!-- article -->
<div class="article-content">
<p>此笔记为我的 CS229 的学习笔记之一,由 Andrew Ng 的 CS229 Lecture notes 和 课堂录像整理而来。用于记录所学到的内容。记录顺序重新编排过,并非是课程原本的教学顺序,并且省略了课程中的一些推导过程,所以适合学习后整理备忘使用,不适合用于同步辅助学习。</p>
<h2 id="toc_0">广义线性模型 GLM (Generalized Linear Models)</h2>
<p>广义线性模型是所学到的 Linear Regression 以及 Logistic Regression 的推广形式(更准确的说,这两种模型都属于 GLM 的特殊情况)。它有三个关键假设(Assumptions)构成:</p>
<ol>
<li>\(y \mid x;\theta\sim ExponentialFamily(\eta)\) :对于固定的参数 \(\theta\) 以及给定 \(x\), \(y\) 的分布服从某一指数分布族(如高斯分布、伯努利分布、Softmax分布)</li>
<li>对于给定的 \(x\) ,目标是预测 \(T(y)\) 的值。换一种说法就是,我们定义假设函数 \(h(x) = E[y\mid x]\)</li>
<li>natural parameter \(\eta\) 和 输入 \(x\) 是线性相关的, \(\eta = \theta^ \mathrm{ T } x\) (其中,当输入 \(x\) 和 \(\eta\) 是向量的时候, \(\eta_i = \theta_i^ \mathrm{T}x\))</li>
</ol>
<span id="more"></span><!-- more -->
<p>以上三个假设,一般只有第一个需要我们决定所使用的分布,其他两个假设都是直接定义。关键的地方来了,通过选择不同的<em>指数分布族</em>分布,我们能够得到不同的模型:</p>
<ul>
<li>高斯分布,则得到 Linear Regression</li>
<li>伯努利分布,则得到 Logistic Regression</li>
<li>Softmax 分布,得到 Softmax Regression</li>
</ul>
<p>其中,Lenear Regression 为回归模型 (regression), Logistic Regression 和 Softmax Regression 都是分类模型 (classification)。</p>
<p>则我猜测,是否根据所假设的分布是离散分布还是连续分布,分别能够得到分类模型和回归模型呢?有待后续的学习验证。</p>
<h3 id="toc_1">具体步骤</h3>
<ol>
<li>假设 \(y\) 服从的分布,并将所假设的分布化为标准的指数分布族标准形式:\[ p(y;\eta) = b(y)\exp(\eta^\mathrm{T}T(y)-a(\eta))\]</li>
<li>使用 \(\eta\) 表示出 \(E[y\mid x;\theta]\),则我们得到了使用 \(\eta\) 表示的假设函数 \(h_\theta(\eta)\)</li>
<li>根据假设3,\(\eta = \theta^ \mathrm{ T } x\),直接代入假设函数,得到 \(h_\theta(x)\)</li>
</ol>
<p>之后:</p>
<ol>
<li>通过得到的假设函数,我们能够定义出代价函数 (Cost function) 或 似然函数 (likelihood) </li>
<li>通过优化方法如梯度下降、牛顿法,以最小化代价函数或者最大化似然函数,得到最优的 \(\theta\) 值。</li>
</ol>
<h2 id="toc_2">优化方法</h2>
<h3 id="toc_3">梯度下降法</h3>
<p>包括以下三种子类:</p>
<ul>
<li>Batch Gradient Descent </li>
<li>Mini-batch Gradient Descent</li>
<li>Stochastic Gradient Descent</li>
</ul>
<p>三种方法的主要区别在于,每一步优化所使用的样本数量大小:</p>
<ul>
<li>Batch 使用<strong>全部</strong>样本计算平均梯度后才进行一步更新;</li>
<li>Mini-batch 使用<strong>一小部分</strong>样本计算平均梯度就进行一步更新;</li>
<li>Stochastic 使用<strong>一个</strong>样本,计算梯度,进行更新</li>
</ul>
<h3 id="toc_4">牛顿法</h3>
<p>牛顿法用于寻找函数零点位置的优化方法,使用函数的导数(梯度)来计算参数的变化量,从而更新参数</p>
<p>由于我们需要寻找函数的极大值(极小值),则我们可以通过牛顿法寻找原函数的一阶导数的零点,将优化问题转化为寻找零点问题,以此来寻找原函数的极大值(极小值)。</p>
<p>牛顿法在二维的参数更新公式为:</p>
<p>\[\theta := \theta - \Delta\]</p>
<p>\[\Delta = \frac{f^\prime(\theta)}{f^{\prime\prime}(\theta)}\]</p>
<p>多维时,参数更新公式变为: </p>
<p>\[\theta := \theta - H^{-1}\nabla_\theta \ell(\theta)\]</p>
<h2 id="toc_5">Linear Regression</h2>
<p>简单的模型介绍就不说了,只记录这门课程给我额外学习到的一些知识点。</p>
<p>首先是 Linear Regression 使用的是最小平方误差法 LMS 来进行函数优化并寻找最优 \(\theta\) 值的。在我第一次学习到这个方法的时候,仅仅是觉得这个误差函数很有道理,感觉能说得过去,并没有理解其背后的理论基础。</p>
<p>Andrew Ng 使用概率学上的解释,告诉了我,为什么使用最小平方误差法。</p>
<p>我们使用假设函数 \(h(x) = \theta^\mathrm{T}x^{(i)}\) 来作为给定输入 \(x\) 时,对 \(y\) 的预测,则我们可以得到这样一个等式</p>
<p>\[y^{(i)} = \theta^\mathrm{T}x^{(i)} + \epsilon^{(i)}\]</p>
<p>\(\epsilon^{(i)}\) 是误差项,包括了未被找到的特征或随机噪声。此时,我们假设:</p>
<ol>
<li>误差都是独立同分布的</li>
<li>误差项符合高斯分布</li>
</ol>
<p>则有\(\epsilon^{(i)}\sim \cal{N}(0,\sigma^2) \),即 \(y^{(i)} - \theta^\mathrm{T}x^{(i)}\sim \cal{N}(0,\sigma^2) \)</p>
<p>省略一部分推导,我们能够得到对数似然函数 </p>
<p>\[\ell (\theta) = m\log \frac{1}{\sqrt{2\pi}\sigma} - \frac{1}{\sigma^2}\cdot\frac{1}{2}\sum_{i=1}^{m} (y^{(i)} - \theta^\mathrm{T}x^{(i)})^2\]</p>
<p>则当我们最大化对数似然函数时,即最小化 </p>
<p>\[\frac{1}{2}\sum_{i=1}^{m}(y^{(i)} - \theta^\mathrm{T}x^{(i)})^2\] </p>
<p>即最小化平方误差。</p>
<p>最终我们得到结论:当我们对数据的分布进行以上假设时,最大化对数似然函数相当于最小化平方误差。</p>
<h3 id="toc_6">Locally weighted linear regression</h3>
<p>这是一种 Linear Regression 的特殊形式,它在误差函数中增加了一项权重,变为\(\sum_i w^{(i)}(y^{(i)} - \theta^\mathrm{T}x^{(i)})^2\)</p>
<p>其中 \(w^{(i)}\) 就是非负权重,对于需要重点拟合的区域 \(w^{(i)}\) 会比较大。\(w^{(i)}\) 并不需要满足和为1的约束,因为他不是概率分布,只是单纯的惩罚项。</p>
<p>通常来说,对于权重 \(w^{(i)}\) 的选择,我们使用以下函数</p>
<p>\[w^{(i)} = \exp(-\frac{(x^{(i)} - x)^2}{2\tau^2})\]</p>
<p>需要注意的是,这个函数和高斯分布没有关系,仅仅是常规的钟形函数而已。参数 \(\tau\) 影响了当远离所求点 \(x\) 时权值下降的速度。</p>
<p>则对于权重较大的区域,所求得的曲线拟合程度较高。这一方法在预测的时候,通常将待预测区域的权重提高,然后重新拟合曲线。所以每一次预测都需要重新拟合曲线,使得它在训练样本较大时效率比较低。</p>
</div>
<div class="row">
<div class="large-6 columns">
<p class="text-left" style="padding:15px 0px;">
<a href="14967660338811.html"
title="Previous Post: CS229 学习笔记 Part2">« CS229 学习笔记 Part2</a>
</p>
</div>
<div class="large-6 columns">
<p class="text-right" style="padding:15px 0px;">
<a href="14883590547961.html"
title="Next Post: 原始模型优化笔记">原始模型优化笔记 »</a>
</p>
</div>
</div>
<div class="comments-wrap">
<div class="share-comments">
<div id="disqus_thread"></div>
<script>
/**
* RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS.
* LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables
*/
/*
var disqus_config = function () {
this.page.url = PAGE_URL; // Replace PAGE_URL with your page's canonical URL variable
this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
};
*/
(function() { // DON'T EDIT BELOW THIS LINE
var d = document, s = d.createElement('script');
s.src = '//yinzo.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
</div>
</div>
</div><!-- article-wrap -->
</div><!-- large 8 -->
<div class="large-4 medium-4 columns">
<div class="hide-for-small">
<div id="sidebar" class="sidebar">
<div id="site-info" class="site-info">
<div class="site-a-logo"><img src="asset/img/3.png" /></div>
<h1>雪地</h1>
<div class="site-des"></div>
<div class="social">
<a class="github" target="_blank" href="https://github.com/Yinzo" title="GitHub">GitHub</a>
<a class="email" href="mailto:yinz995-1@yahoo.com" title="Email">Email</a>
<a class="rss" href="atom.xml" title="RSS">RSS</a>
</div>
</div>
<div id="site-categories" class="side-item ">
<div class="side-header">
<h2>Categories</h2>
</div>
<div class="side-content">
<p class="cat-list">
<a href="Security%20Info.html"><strong>Security Info</strong></a>
<a href="Adversary%20Learning.html"><strong>Adversary Learning</strong></a>
<a href="TCPIP.html"><strong>TCP/IP</strong></a>
<a href="Pattern%20Recognition.html"><strong>Pattern Recognition</strong></a>
<a href="Python.html"><strong>Python</strong></a>
<a href="OS.html"><strong>OS</strong></a>
<a href="Deep%20Learning.html"><strong>Deep Learning</strong></a>
<a href="Machine%20Learning.html"><strong>Machine Learning</strong></a>
</p>
</div>
</div>
<div id="site-categories" class="side-item">
<div class="side-header">
<h2>Recent Posts</h2>
</div>
<div class="side-content">
<ul class="posts-list">
<li class="post">
<a href="14967660338811.html">CS229 学习笔记 Part2</a>
</li>
<li class="post">
<a href="14947523529684.html">CS229 学习笔记 Part 1</a>
</li>
<li class="post">
<a href="14883590547961.html">原始模型优化笔记</a>
</li>
<li class="post">
<a href="14863637393852.html">低素质弹幕分类器的CNN实现</a>
</li>
<li class="post">
<a href="14863637259966.html">低素质弹幕分类器 CNN 训练笔记</a>
</li>
</ul>
</div>
</div>
<div id="site-link" class="side-item">
<div class="side-header">
<h2>Link</h2>
</div>
<div class="side-content">
<p class="link-list">
<a href="http://blog.winkidney.com/">阿毛</a>
</p>
</div>
</div>
</div><!-- sidebar -->
</div><!-- hide for small -->
</div><!-- large 4 -->
</div><!-- row -->
<div class="page-bottom clearfix">
<div class="row">
<p class="copyright">Copyright © 2016
Powered by <a target="_blank" href="http://www.mweb.im">MWeb</a>,
Theme used <a target="_blank" href="http://github.com">GitHub CSS</a>.
Modified by <a target="_blank" href="http://yinz.xyz">Yinzo</a>.</p>
</div>
</div>
</section>
</div>
</div>
<script src="asset/js/foundation.min.js"></script>
<script>
$(document).foundation();
function fixSidebarHeight(){
var w1 = $('.markdown-body').height();
var w2 = $('#sidebar').height();
if (w1 > w2) { $('#sidebar').height(w1); };
}
$(function(){
fixSidebarHeight();
})
$(window).load(function(){
fixSidebarHeight();
});
</script>
<script src="asset/chart/all-min.js"></script><script type="text/javascript">$(function(){ var mwebii=0; var mwebChartEleId = 'mweb-chart-ele-'; $('pre>code').each(function(){ mwebii++; var eleiid = mwebChartEleId+mwebii; if($(this).hasClass('language-sequence')){ var ele = $(this).addClass('nohighlight').parent(); $('<div id="'+eleiid+'"></div>').insertAfter(ele); ele.hide(); var diagram = Diagram.parse($(this).text()); diagram.drawSVG(eleiid,{theme: 'simple'}); }else if($(this).hasClass('language-flow')){ var ele = $(this).addClass('nohighlight').parent(); $('<div id="'+eleiid+'"></div>').insertAfter(ele); ele.hide(); var diagram = flowchart.parse($(this).text()); diagram.drawSVG(eleiid); } });});</script>
<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script><script type="text/x-mathjax-config">MathJax.Hub.Config({TeX: { equationNumbers: { autoNumber: "AMS" } }});</script>
<script src="asset/js/instantclick.min.js" data-no-instant></script>
<script data-no-instant>InstantClick.on('change', function() {
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
});</script>
<script data-no-instant>InstantClick.init();</script>
</body>
</html>