tag:blogger.com,1999:blog-15467216322999268682024-03-05T19:45:39.840+08:00MurmurKuan-Haohttp://www.blogger.com/profile/17347836553446991920noreply@blogger.comBlogger8125tag:blogger.com,1999:blog-1546721632299926868.post-23050062307414504502017-06-26T16:01:00.001+08:002017-06-26T17:57:27.703+08:00VAE and Conditional VAE今天要來介紹另一種generative model──variational auto-encoder (VAE) [1] 以及他的延伸 conditional variational auto-encoder (Conditional VAE) [2]<br />
之前提到的<a href="https://life-murmur.blogspot.tw/2017/06/gan-and-conditional-gan.html" target="_blank">generative adversarial nets (GAN)</a> 是讓discriminator和generator透過互相競爭產生一個足夠好的generator來generate data<br />
而VAE則是想透過機率模型模擬出data的distribution,新的data可以透過distribution sample得到<br />
<br />
<a name='more'></a>我們先來看看傳統的auto-encoder吧<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjczrDm42JBO3MbTRcFA18dOscdiMprDxnQnJbmxyfI9eiNILqJjSJTM8ab1ETlCX2CstFGaZwcANosAqIC2d19g1y3TEZiSIjgfybf6TRKc8ZDhP44ZxTXDSGNS3wFsT7WjDnAfJvy5Foq/s1600/auto_encoder.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="462" data-original-width="231" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjczrDm42JBO3MbTRcFA18dOscdiMprDxnQnJbmxyfI9eiNILqJjSJTM8ab1ETlCX2CstFGaZwcANosAqIC2d19g1y3TEZiSIjgfybf6TRKc8ZDhP44ZxTXDSGNS3wFsT7WjDnAfJvy5Foq/s320/auto_encoder.png" width="160" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
傳統的auto-encoder有兩個東西要學──encoder和decoder<br />
通常我們會用neural network來學encoder和decoder,並希望encoder和decoder滿足一些性質<br />
<br />
data $x$ 可以透過encoder轉成一個latent vector $z$<br />
這個latent vector $z$ 可以想像成是data $x$ 的另一種表示方法<br />
舉個動物圖片的例子來說,我們可以將各種動物的圖片透過encoder轉成latent vector $z$<br />
$z$ 每個維度可以代表不同的意義,像是動物有幾隻腳,有沒有翅膀等等,當然可能會有更複雜的意義,要看encoder學成怎麼樣<br />
用latent vector $z$ 來代替data $x$ 有一些好處,其中一個是我們可以讓latent vector $z$ 的維度比data $x$ 小很多,這樣用 $z$ 代替 $x$ 在很多運算上都會比較快速<br />
<br />
而latent vector $z$ 可以透過decoder轉回data $\bar{x}$<br />
為了確保latent vector $z$ 能夠完整的保存原本的data $x$,我們會希望data $x$ 透過encoder轉成latent vector $z$ 再透過decoder轉回的 $\bar{x}$ 能跟原本的 $x$ 越像越好<br />
這大致上就是傳統的auto-encoder<br />
<br />
那麼auto-encoder有沒有辦法產生任意的data呢<br />
一個簡單的想法是,我們隨意指定一個latent vector $z$,透過decoder將 $z$ 轉成 $\bar x$ 就可產生一個新的data了<br />
不過不幸地,這個想法產生的data效果並不好<br />
舉剛剛動物圖片的例子,常常隨意指定的 $z$ 所產生的圖片看起來並不像一個動物<br />
最主要的原因是這樣學出來 $z$ 的space其實非常的sparse,我們隨意指定的 $z$ 不一定很有意義<br />
<br />
variational auto-encoder (VAE) 剛好可以解決這個問題<br />
我們現在換一種機率的觀點來看 $x$ 和 $z$ 之間的關係<br />
假設真實世界的的data $x$ 是根據latent vector $z$ 產生的,而 $z$ 則是根據某種distribution $P(z)$ 產生的<br />
換句話說,我們根據 $P(z)$ sample出latent vector $z$,再根據 $P(x|z)$ 得到data $x$<br />
為了簡單起見,VAE的paper假設 $P(z)=\mathcal N (z; 0, I)$ 是一個multivariate normal distribution<br />
<br />
這時候我們回來看看剛剛auto-encoder的架構<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju10bf7D0z_SiyZuj4MPuuQmKfm10lZ4LKN-5N-dJiE2E_8dhO38emzsl1szwaVmW4PrAuDppGsrE5AGMD7vq_ISd6FakRB6At1myRn2Ye7wbKPL4rOEScPEpp0nuymzMg72I6Q03OVI7t/s1600/prob_auto_encoder.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="462" data-original-width="232" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju10bf7D0z_SiyZuj4MPuuQmKfm10lZ4LKN-5N-dJiE2E_8dhO38emzsl1szwaVmW4PrAuDppGsrE5AGMD7vq_ISd6FakRB6At1myRn2Ye7wbKPL4rOEScPEpp0nuymzMg72I6Q03OVI7t/s320/prob_auto_encoder.png" width="160" /></a></div>
<br />
有了data $x$,可以透過 $P(z|x)$ 得到 latent vector $z$<br />
如果我們能用neural network學一個distribution $Q(z|x) \approx P(z|x)$,那麼這個network就可以看成是encoder<br />
VAE的paper假設我們要學的encoder $Q(z|x) = \mathcal N (z; \mu, \sigma^2 I)$ 是一個multivariate Gaussian <br />
換句話說,對於data $x$,encoder $Q(z|x)$ 會output一個 $z$ 的multivariate Gaussian distribution<br />
有了這個distribution,我們就可以sample一個可能的的latent vector $z$ 並配合neural network學出 $P(x|z)$ 當做decoder<br />
整個架構會像這樣<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioQZt8PAMsb1iPepCUo046kqsQwnto196C2UOmTGeyAaVjEaHOggZjfAPC85KOMQN_rG7GQBamMrQkfhTz8hNLbumqGBTg0jqLyKhNc_Gzv-6GwFggjETACiB2BQljJqor3lOarwffkLr8/s1600/vae.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="551" data-original-width="472" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioQZt8PAMsb1iPepCUo046kqsQwnto196C2UOmTGeyAaVjEaHOggZjfAPC85KOMQN_rG7GQBamMrQkfhTz8hNLbumqGBTg0jqLyKhNc_Gzv-6GwFggjETACiB2BQljJqor3lOarwffkLr8/s400/vae.png" width="342" /></a></div>
<br />
在VAE的paper中,是用一個叫做variational inference的方法來學encoder $Q(z|x)$<br />
由於variational inference的數學式子比較複雜,以後有空再介紹,有興趣的人可以看<a href="http://cpmarkchang.logdown.com/posts/737247-pgm-variational-inference" target="_blank">這裡</a><br />
<br />
一旦我們有了encoder和decoder,我們便可以從 $P(z)=\mathcal N (z; 0, I)$ sample出 $z$,再透過decoder產生新的data<br />
這樣的機率模型解決了latent space太sparse的問題<br />
我們來看看VAE根據不同的 $z$ 產生出來的data長怎麼樣<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7i5KzOrvv0H0xe7Tc9FFLiAsrKmncxVRppPaMyfqeeYoUI6ZRzneLuqHhj6PmIPQjz0d3aQXH0oKkUGdnKIVgGJJTlPqiDlm9Kd9pNCAMvlkHXZLQfPaKc0CTkPv7XXHVX1TJEFyDCNba/s1600/vae_exp.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="252" data-original-width="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7i5KzOrvv0H0xe7Tc9FFLiAsrKmncxVRppPaMyfqeeYoUI6ZRzneLuqHhj6PmIPQjz0d3aQXH0oKkUGdnKIVgGJJTlPqiDlm9Kd9pNCAMvlkHXZLQfPaKc0CTkPv7XXHVX1TJEFyDCNba/s1600/vae_exp.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">source: VAE paper</td></tr>
</tbody></table>
<br />
這是VAE從一堆數字圖中所學出來的generative model,的確可以產生出新的數字圖<br />
不過和GAN一樣,VAE並沒有辦法指定data的label<br />
因此有人提出了VAE的延伸──conditional variational auto-encoder (Conditional VAE)<br />
延伸的方法和Conditional GAN一樣,將encoder和decoder的input多給一個label的資訊<br />
架構如下<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxhBu8ZcMpATXkLqxQIcNH7CNt5DqUVqOjmqtuaALJ7JjN6sgjbWINrKbxF85SKACCHu-jCn4Dyjp_mRB1cCQA-xsoq41jS5RpPvmzr_ujzhKiqHqysLWfyQC3O8XFEjpimByR5SSDl3hb/s1600/conditional_vae.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="559" data-original-width="600" height="372" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxhBu8ZcMpATXkLqxQIcNH7CNt5DqUVqOjmqtuaALJ7JjN6sgjbWINrKbxF85SKACCHu-jCn4Dyjp_mRB1cCQA-xsoq41jS5RpPvmzr_ujzhKiqHqysLWfyQC3O8XFEjpimByR5SSDl3hb/s400/conditional_vae.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
如此一來我們就可以指定產生data的label<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSKMrR3ZXiclM_0W7Azivf5cja4uq2VxOTJJIS_rEzftugdhYarhe9tQkWNeYaZvKgCLMyTfbBerR2fCTaiiFnBSrUR7mh6jdNj6wyCe_TC_SsD6U0leMaACOyDtxwbOVIuAv4NlQHKtop/s1600/conditional_vae_exp2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="278" data-original-width="836" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSKMrR3ZXiclM_0W7Azivf5cja4uq2VxOTJJIS_rEzftugdhYarhe9tQkWNeYaZvKgCLMyTfbBerR2fCTaiiFnBSrUR7mh6jdNj6wyCe_TC_SsD6U0leMaACOyDtxwbOVIuAv4NlQHKtop/s640/conditional_vae_exp2.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">source: Conditional VAE paper</td></tr>
</tbody></table>
<br />
在Conditional VAE的paper中還有一個有趣的實驗<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSsrlHdkNsMt3RTjCY2SYCxjuMv5DifT4XZ77wECsmB6eRXYJOTOmuWc3MlixTwcpBOH_Gk_6UIVGQPIyjCRNW_lJFRyKQtSnPC1Pwz6GJexK0iLbCHP29Fernx_NuIMffvnYL0S5YvUtV/s1600/conditional_vae_exp.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="326" data-original-width="375" height="277" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSsrlHdkNsMt3RTjCY2SYCxjuMv5DifT4XZ77wECsmB6eRXYJOTOmuWc3MlixTwcpBOH_Gk_6UIVGQPIyjCRNW_lJFRyKQtSnPC1Pwz6GJexK0iLbCHP29Fernx_NuIMffvnYL0S5YvUtV/s320/conditional_vae_exp.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">source: Conditional VAE paper</td></tr>
</tbody></table>
<br />
上圖中,最左一欄的數字是真的data<br />
將這些真的data透過encoder可以得到對應的latent vector $z$<br />
右邊的0~9則是這些latent vector在decode時input設成不同label的結果<br />
結果非常有趣,不管latent vector是從哪個數字得到的,decode出來的數字都會是decoder的input label,差別只在於字形的不同<br />
<br />
以上大致上就是VAE以及Conditional VAE的介紹<br />
<br />
<br />
<b><br /></b>
<b>Reference</b><br />
[1] D. P. Kingma and M.Welling. "Auto-encoding variational bayes." <i>Preprint arXiv:1312.6114</i>, 2013.<br />
[2] D. P. Kingma, S. Mohamed, D. J. Rezende, and M. Welling. "Semi-supervised learning with deep generative models." <i>NIPS</i>, 2014.<br />
[3] http://wiseodd.github.io/techblog/2016/12/17/conditional-vae/<br />
[4] http://zhuanlan.zhihu.com/p/22464760<br />
[5] http://www.cnblogs.com/wangxiaocvpr/p/6231019.html<br />
[6] http://kvfrans.com/variational-autoencoders-explained/<br />
<br />
<br />Kuan-Haohttp://www.blogger.com/profile/17347836553446991920noreply@blogger.comtag:blogger.com,1999:blog-1546721632299926868.post-90283346210952810242017-06-19T18:00:00.000+08:002017-06-23T09:39:10.308+08:00GAN and Conditional GAN一直以來我都想寫一些類似科普的文章,希望能夠用沒那麼技術的文字來介紹一些東西<br />
只是之前都太懶惰了哈哈哈哈<br />
最近決定邊讀新的paper,邊用blog介紹這些paper,寫下我對這些paper的理解<br />
有發現錯誤的地方請跟我說,也歡迎大家討論<br />
<br />
這篇要介紹的是machine learning現在超紅的generative adversarial nets (GAN) [1] 以及他的延伸 conditional generative adversarial nets (Conditional GAN) [2]<br />
適合對machine learning有些認識的人閱讀<br />
<br />
<a name='more'></a>在machine learning的世界裡,我們通常會準備一些data<br />
然後設計machine learning algorithm來讓machine從這些data中產生一個model學東西<br />
比如說,我們準備了很多張小狗的圖片,希望machine能夠學一個"辨識小狗"的model<br />
這個model對於新的圖片,要能夠判斷這是不是一張小狗的圖片<br />
這個model可以回答yes or no,也可以回答這是小狗圖片的機率是多少<br />
像這樣的model,我們稱之為discriminative model<br />
透過這個model,machine能認得小狗的樣子,但如果我們叫machine畫一隻新的小狗,machine可能畫不出來<br />
換句話說,machine可以分辨(discriminate),可是無法產生(generate)<br />
<br />
因此有一部份的人在研究generative model,希望model能夠學會產生data<br />
用剛剛的例子,machine需要從一堆小狗的圖片當中學一個model,這個model要能畫出新的小狗<br />
要學一個generative model通常會比discriminative model困難一些<br />
<br />
這篇的主角,generative adversarial nets (GAN) 用了一個很有趣的方法來讓machine學generative model<br />
GAN設計了兩個neural network: generator和discriminator,並且讓他們互相競爭來達到目的<br />
整個GAN的架構如下<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb4KZa3sJtAa0mdR3HLGYY3Fq7tCjKYmud4nvLyoUt_4U1YRVeQB8x3x-nRy6-1Bow3kexX4_pNiSK2qqoRdbM5NlWz9C5Txy3A69X6_zOID0VAMnG9mGh7M4bm5Om4_xvbG2cUD_fOoOZ/s1600/gan.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="400" data-original-width="468" height="273" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb4KZa3sJtAa0mdR3HLGYY3Fq7tCjKYmud4nvLyoUt_4U1YRVeQB8x3x-nRy6-1Bow3kexX4_pNiSK2qqoRdbM5NlWz9C5Txy3A69X6_zOID0VAMnG9mGh7M4bm5Om4_xvbG2cUD_fOoOZ/s320/gan.png" width="320" /></a></div>
<br />
假設我們現在有一些data $\{x_1, x_2, ..., x_n\}$<br />
我們的目標是學一個generator $G$,這個 $G$ 要能將一個任意的random noise $z$ 變成新的data<br />
換句話說,對於一個任意的random noise $z$, $G(z)$ 就是所產生的data<br />
<br />
這時有另一個discriminator $D$,他的目標是要分辯哪個是真的data,哪個是 $G$ 產生的data<br />
也就是說,對於一個data $x$,$x$ 有可能是真的data,也有可能是 $G$ 產生的<br />
而 $D(x)$ 則是discrminator覺得這個 $x$ 是真的data的機率是多少<br />
如果用數學式來表達,discriminator $D$ 要做的事情是<br />
$$\large \max\limits_{D} V(D,G) = \mathbb{E}_{x_i} \left[\log D(x) \right] + \mathbb{E}_{z} \left[ \log (1-D(G(z))) \right] $$<br />
這邊解釋一下這個式子<br />
對於真的data $x_i$,$D(x)$應該要越高越好,所以 $\mathbb{E}_{x_i} \left[\log D(x) \right]$ 要越大<br />
對於 $G$ 產生的 $G(z)$,$D(G(z))$要越低越好,所以 $\mathbb{E}_{z} \left[ \log (1-D(G(z))) \right]$ 要越大<br />
<br />
而generator $G$ 要做的事情則是反過來,要產生data讓discriminator $D$ 無法分辨<br />
也就是<br />
$$\large \min\limits_{G} \max\limits_{D} V(D,G) = \mathbb{E}_{x_i} \left[\log D(x) \right] + \mathbb{E}_{z} \left[ \log (1-D(G(z))) \right] $$<br />
整個流程就是generator $G$ 想辦法產生data,discriminator $D$ 想辦法分辨data<br />
$G$ 和 $D$ 不斷競爭,最後到底誰會贏呢<br />
在paper中,作者證明了最後 $D$ 會落敗,最後不管什麼 $x$,$D(x)$ 都會是0.5<br />
也就是我們的generator $G$ 能夠產生很逼真的data<br />
<br />
這邊放幾個paper的實驗結果<br />
第一個是給machine一堆人臉的圖片,要machine畫出新的人臉<br />
除了最右邊那欄是真的圖片,其他的都是machine畫出來的,還算逼真吧<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSIAIrn2UaeWPhHjbDgdkpM4cB9dhKxwyM5o0yq-2vnFA7_kfUqA9YO2tuSt1HdeOqbKA0Bvoq6wQ4uoIkZlbgAf9T-d37XDwnhQV6rQ7fOU06SU8Va6f7g-8fdl-rxeFsD0G8Sv_2S0r5/s1600/gan_exp1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="438" data-original-width="638" height="219" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSIAIrn2UaeWPhHjbDgdkpM4cB9dhKxwyM5o0yq-2vnFA7_kfUqA9YO2tuSt1HdeOqbKA0Bvoq6wQ4uoIkZlbgAf9T-d37XDwnhQV6rQ7fOU06SU8Va6f7g-8fdl-rxeFsD0G8Sv_2S0r5/s320/gan_exp1.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">source: GAN paper [1]</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
這是要machine畫數字<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB6A9X3n4EhHxA_AWNC62h-MIx2f-uuqODR1aak032hZRGyqVQaCI9K20AAe7uKMgVb4LIWZmVMvR-wOhtbbj2eEz7YqhjRUA0lGYE4ssC8K_KWmj6iL9xsoQViX4lNkBSQdt5zZ0Rae3-/s1600/gan_exp2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="440" data-original-width="638" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB6A9X3n4EhHxA_AWNC62h-MIx2f-uuqODR1aak032hZRGyqVQaCI9K20AAe7uKMgVb4LIWZmVMvR-wOhtbbj2eEz7YqhjRUA0lGYE4ssC8K_KWmj6iL9xsoQViX4lNkBSQdt5zZ0Rae3-/s320/gan_exp2.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">source: GAN paper [1]</td></tr>
</tbody></table>
<br />
GAN透過競爭機制,成功得讓machine學會generative model<br />
不過這邊有個小問題,在第二個實驗當中,我們給machine的數字有很多種<br />
machine雖然能夠產生逼真的數字,可是我們卻無法指定machine產生特定的數字<br />
這也成了conditional generative adversarial nets (Conditional GAN) 這篇paper的動機 <br />
<br />
Conditional GAN想要解決的問題是這樣的<br />
現在我們一樣給machine很多data,不過每個data會對應一個label<br />
以數字圖的例子來說,每個data就是一張圖,而對應的label就是這張圖代表的數字<br />
我們一樣希望machine能夠從這些圖中學一個generative model,並且能夠畫出新的數字圖<br />
不一樣的是,我們希望可以指定畫出來的數字要是什麼<br />
也就是,我們可以指定label要是什麼<br />
<br />
Conditional GAN的架構跟GAN非常類似<br />
差別只在於generator和discriminator的input多了label<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXAB_RQnxd8vv-GK7tjEGqfFMQiLqntQeEL4E4lR2P5K4pa3Xto13vdxlm5unzh4Cg9LUOCZdhN_IS3IZy7XKmwQRWxyUU57k39yn6bZ0VT4q7-sD-yqJbESttyKhlP0yaRhM5J5QqOxi7/s1600/conditional_gan.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="396" data-original-width="903" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXAB_RQnxd8vv-GK7tjEGqfFMQiLqntQeEL4E4lR2P5K4pa3Xto13vdxlm5unzh4Cg9LUOCZdhN_IS3IZy7XKmwQRWxyUU57k39yn6bZ0VT4q7-sD-yqJbESttyKhlP0yaRhM5J5QqOxi7/s640/conditional_gan.png" width="640" /></a></div>
<br />
在這個架構下,generator會根據不同的label $y$ 產生不同的data $G(z|y)$<br />
而discriminator $D$ 預測的機率 $D(x|y)$ 則是代表這個 $x$ 的label是 $y$ 的機率<br />
Conditional GAN的數學式跟GAN的數學式非常像<br />
$$\large \min\limits_{G} \max\limits_{D} V(D,G) = \mathbb{E}_{x_i}
\left[\log D(x|y) \right] + \mathbb{E}_{z} \left[ \log (1-D(G(z|y))) \right]
$$<br />
透過這樣的改動,我們就可以指定machine產生data的label了<br />
下圖是要求machine畫各式各樣的0~9<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDeFtTMEcxHgFT-o0velnZ53uTiM2T4QrFtv82kF2KjEiCa9dt8kEx8CUO0KzEJlb8OvM40KxHBz9LeUUeXX90SFfZJXaZjU9mLqxO-qTVXKYmLuXonDYO2CfF8s0LKITfd4qkp8my3RUX/s1600/conditional_gan_exp.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="624" data-original-width="1208" height="329" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDeFtTMEcxHgFT-o0velnZ53uTiM2T4QrFtv82kF2KjEiCa9dt8kEx8CUO0KzEJlb8OvM40KxHBz9LeUUeXX90SFfZJXaZjU9mLqxO-qTVXKYmLuXonDYO2CfF8s0LKITfd4qkp8my3RUX/s640/conditional_gan_exp.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">source: Conditional GAN paper [2]</td></tr>
</tbody></table>
<br />
GAN和Conditional GAN有很多的應用,等我之後看了更多的paper再來介紹給大家<br />
<br />
<br />
<br />
<b>Reference</b><br />
[1] I. J. Goodfellow, J. Pouget-Abadie, M. Mirza, and
B. Xu, D. Warde-Farley, S. Ozair, A. Courville, and Y. Bengio. "Generative adversarial nets." <i>NIPS</i>, 2014.<br />
<div>
[2] M. Mirza and S. Osindero. "Conditional generative adversarial nets." <i>Preprint arXiv:1411.1784</i>, 2014.</div>
<div>
<br /></div>
<div>
<br /></div>
Kuan-Haohttp://www.blogger.com/profile/17347836553446991920noreply@blogger.comtag:blogger.com,1999:blog-1546721632299926868.post-23449938863243781932017-06-02T11:34:00.000+08:002017-06-19T15:10:35.916+08:00聊聊AlphaGo繼去年3月AlphaGo擊敗了李世乭之後<br />
前陣子AlphaGo又擊敗了目前圍棋積分世界第一的柯潔<br />
這樣的結果在圍棋界和AI界都造成了極大的轟動<br />
剛好我對這兩個領域都稍有涉獵,就來談談AlphaGo的出現代表了什麼意義吧<br />
<br />
和人類比起來,AI下棋會有什麼優勢呢<br />
大部分人第一個想到的應該是計算能力吧<br />
在下棋的時候,棋手會在腦內模擬棋局的各種變化<br />
我下這、你下那、我再下這、你再下那,啊!這樣的下法好像不好<br />
然後重新模擬另一種變化,直到找到一個比較滿意的下法<br />
不過人類的計算能力有限,一秒鐘能夠計算3~4種變化就很厲害了<br />
但AI一秒鐘卻可以計算上千甚至上萬種變化<br />
這樣的計算能力的確讓AI在許多棋類佔盡優勢<br />
<br />
<a name='more'></a>但是圍棋比較特別,和其他棋類比起來,圍棋比較複雜<br />
圍棋每一步都有上百種選擇,一盤棋通常會下至少100手棋,因此能產生的變化數量非常的多<br />
就算AI擁有強大的計算能力,想要在短時間內模擬所有的變化也是不太可能的事情<br />
那麼人類是怎麼克服這個困難的呢<br />
答案是經驗,也就是是有時候我們所說的"棋感"<br />
<br />
人類透過不斷下棋累積經驗,在面對一個新的盤面時,這樣的經驗讓棋手可以快速判斷這時候哪些地方絕對不可能下,哪些地方有很大的機率要下<br />
有了這樣的判斷,棋手將大部分的思考時間花在那些比較可能的地方,不用浪費時間去思考那些不可能的地方<br />
換句話說,經驗幫助人類減少了需要計算的變化數量<br />
減少的量其實非常的多,說刪掉了99%的變化數量可能都不為過<br />
<br />
除了判斷可能的著手以外,經驗也幫助了人類判斷棋局優劣的能力<br />
正常來說,可能要模擬20~30手以上才能判斷一個變化是黑棋有利還是白棋有利<br />
不過經驗老到的棋手可能只模擬了5~6手就可以判斷哪方有利,不需要繼續計算下去<br />
更複雜的狀況是圍棋的盤面很大,有時候局部的優劣並不能代表全局的優劣,如何準確的判斷都是需要經驗的<br />
如果判斷棋局優劣的能力越好,對於每一步棋的價值也能比較精準的估算,就能下出比較好的棋步<br />
<br />
棋力高低的差別就在於計算能力以及經驗的掌握度,兩者都相當重要<br />
一般來說,大家會覺得和計算能力比起來,經驗的掌握度是比較抽象的概念,是比較憑感覺的東西<br />
大家也普遍認為這種抽象又沒有明確目標的能力,對於AI來說是很難學習的,這反而是人類的強項<br />
<br />
的確在AlphaGo之前的AI雖然有強大的計算能力,但是卻無法妥善的利用過往對局的經驗<br />
因此花了大量的計算在相對不重要的地方,導致下出來的棋步不夠有威力<br />
但是這次的AlphaGo卻讓人大吃一驚,在這個人類自認強項的地方表現非常好<br />
AlphaGO甚至從自己和自己的對局中學到了新的經驗,下出了人類以前不曾想過,卻又有威力的棋步<br />
<br />
對圍棋界來說,AlphaGo帶來了革命,不但力壓了人類自認的長處,甚至打破了長年以來透過經驗建立起來的棋局判斷方法,這當然是一件相當震撼的事情<br />
而對AI界來說,AlphaGo成功的學會了人類認為抽象模糊的概念<br />
甚至可以自己累積經驗,擁有比人類還厲害的判斷能力<br />
這讓AI能模仿人類做其他事情的機率提升了許多<br />
也讓我們思考是否那些人類認為的抽象概念,要透過數學模型模擬出來其實沒有那麼困難呢<br />
<br />
雖然電腦在圍棋打敗人類是遲早的事情<br />
只是沒想到這一天來的這麼快<br />
以後的AI還能做些什麼事情呢,非常令人期待<br />
<br />
<br />
<br />
<br />
<br />Kuan-Haohttp://www.blogger.com/profile/17347836553446991920noreply@blogger.comtag:blogger.com,1999:blog-1546721632299926868.post-60841889020527109242017-05-31T10:26:00.001+08:002017-06-02T09:30:07.895+08:00國文教育少了什麼呢今天想要來談談台灣的國文教育<br />
前陣子在網路上看到網友在票選哪個科目小時候學了對長大最沒什麼幫助,國文被許多人提到<br />
從小到大,國文佔的學分是數一數二多的<br />
我們花了這麼多時間學習國文,大家卻覺得沒什麼幫助<br />
這真是一件很弔詭的事情<br />
<br />
我覺得其中一個重要的原因在於我們的國文教育太注重國文常識和古文理解了<br />
我們花了太多時間在記作者的生平及字號和背誦古文了<br />
反而忽略了許多重要的問題,像是表達能力<br />
<br />
<a name='more'></a>什麼樣的文字能精準的表達心中所想的意思<br />
什麼樣的文字能讓讀者理解的和我們想要表達的意思差不多<br />
什麼樣的文字是有說服力的<br />
什麼樣的文字是有邏輯的<br />
<br />
在我當助教改期末專題報告的時候,我發現了一件事情<br />
很多同學其實花了很多時間和心力在期末專題上,可是他們的報告寫起來卻讓我感覺他們好像沒做什麼事<br />
只看報告的話,會覺得這些同學只做了很多雜事,看不出為什麼要做這些事情,這些事情的重要性在哪裡<br />
但是如果經過適當的組織和改寫,同樣的內容卻可以變成一篇值得稱讚的專題報告<br />
<br />
這不禁讓我想到一件事情<br />
常常會聽到有人說美國學生很會吹牛,10分的事情可以說成12分<br />
可是換個角度想,說不定正是因為他們良好的表達能力,可以讓別人以為他們做了12分的事情<br />
反而臺灣的學生因缺少足夠的表達訓練,10分的事情只能說到8分<br />
一來一往就差了很多<br />
<br />
怎麼樣表達心中所想的,怎麼表達自己付出的努力,我覺得很重要<br />
在我心裡,國文應該要教這樣的東西<br />
<br />
事實上,我們的國文教育的確有嘗試要教這些東西,那就是作文<br />
但是教學生寫作文的時間和古文及國文常識比起來,真是少之又少<br />
對考試為主的臺灣教育體制來說,要透過作文拿高分,對老師和學生要花的心力實在是太多了,不划算<br />
最後作文就慢慢的被忽略了<br />
<br />
除了表達,怎麼解讀別人的文字也是一件很重要的事情<br />
怎麼樣精準地抓住作者想要表達的意思<br />
怎麼樣判斷作者是在誇飾還是描述事實<br />
怎麼樣分辨作者說的話合不合理,因果關係是否正確<br />
<br />
現在的網路文章與新聞實在是太多了<br />
如果大家對於解讀文字都有一定的水準,那麼帶風向的效果就少很多了吧<br />
<br />
表達能力和解讀文字是我覺得現在國文教育缺少的東西<br />
也是我說服自己國文課必須存在的原因<br />
不知道什麼時後國文教育才會改變呢<br />
<br />
<br />
<br />
<br />Kuan-Haohttp://www.blogger.com/profile/17347836553446991920noreply@blogger.comtag:blogger.com,1999:blog-1546721632299926868.post-23032745708166077832017-03-15T15:03:00.002+08:002017-03-15T15:13:46.270+08:00主人與他的11個客人好久沒更新blog了,今天要來和大家分享一個數學面試題<br />
這個面試題是我聽過的題目中數一數二有趣的題目<br />
<br />
題目如下:<br />
有一個主人邀請了11個客人來他家玩,在客人回去之前,主人決定送其中一個客人一份禮物<br />
主人想了一個遊戲來決定這個幸運的人,他要所有客人和自己圍成一圈<br />
一開始禮物在主人手上,接著他會有一半的機率把禮物往左傳,一半的機率把禮物往右傳<br />
拿到禮物的人也要以一半往左一半往右的機率把禮物傳出去<br />
只要客人一碰到這個禮物,他就喪失拿到禮物的機會了,不過他還是得繼續幫忙傳禮物<br />
換句話說,比其他10個客人晚碰到禮物的那個客人即可獲得禮物<br />
現在問題來了,如果你是其中一個客人,請問你坐在圓圈中哪個位子獲得禮物的機會最高呢?<br />
<br />
<a name='more'></a><br />
<input onclick="ans.style.display=ans.style.display=='none'?'':'none'" type="checkbox" value="ON" />點我看參考解答
<br />
<br />
<br />
<div id="ans" style="display: none;">
<br />
應該大多數人的第一感都是主人對面的那個位子吧XD<br />
我們來看看會發生什麼事情<br />
<br />
如下圖,假設將圓圈座位編號0到11,而且主人做在0號的位子<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBug1C5ISZhQKtE-KH0TlGhDyKyG69gTIqerFbHUzxnpBOWs8fuwPFe0Lp1MIrq0VjXHn4TaKvwFAgV0VHY-yS31v1yAXlxSepp2CUOjKKFJkKudWjB_fEH5ucO5Xwn-QovtBs0AqZ3qWG/s1600/guest_circle.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBug1C5ISZhQKtE-KH0TlGhDyKyG69gTIqerFbHUzxnpBOWs8fuwPFe0Lp1MIrq0VjXHn4TaKvwFAgV0VHY-yS31v1yAXlxSepp2CUOjKKFJkKudWjB_fEH5ucO5Xwn-QovtBs0AqZ3qWG/s320/guest_circle.png" width="320" /></a></div>
<br />
禮物會從主人手中開始傳,也就是0號位子<br />
<br />
我們來先來算算看1號客人可以拿到禮物的機率是多少<br />
1號客人要能拿到禮物的條件是,禮物從0號位子傳出去後,經過來來回回傳遞,最後2號客人比1號客人早碰到禮物<br />
換句話說,就是從1號客人的右手邊開始傳,但是左手邊的人要比自己還先碰到禮物的機率<br />
假設這個機率叫做P1吧<br />
<br />
在仔細計算P1等於多少前,我們來看看其他客人拿到禮物的機率跟P1有甚麼關係<br />
因為對稱性的關係,11號客人拿到禮物的機率顯然也是P1<br />
<br />
那麼4號客人拿到禮物的機率會怎麼樣呢<br />
在4號客人碰到禮物前,會有兩種情況發生:<br />
(a) 3號客人比5號客人早碰到禮物<br />
(b) 5號客人比3號客人早碰到禮物<br />
假設這兩個情況的機率為Pa和Pb,那麼Pa+Pb = 1<br />
<br />
如果遇到了(a)的狀況,這時候禮物會從3號客人,也就是4號客人的右手邊傳出去<br />
而4號客人要拿到禮物的條件是比他左手邊的人還要晚碰到禮物<br />
這個情況有沒有很熟悉呢?<br />
沒錯! 這跟剛剛計算1號客人的情況很像,在(a)的狀況下,4號客人拿到禮物的機率就是P1<br />
所以透過情況(a),4號客人拿到禮物的機率為Pa*P1<br />
<br />
那情況(b)會怎麼樣呢<br />
當情況(b)發生時,這時候禮物會從5號客人,也就是4號客人的左手邊傳出去<br />
而4號客人要拿到禮物的條件是比他右手邊的人還要晚碰到禮物,這個11號客人遇到的情況也很像,也是P1<br />
所以透過情況(b),4號客人拿到禮物的機率為Pb*P1<br />
<br />
綜合以上的兩個情況,4號客人拿到禮物的機率為Pa*P1 + Pb*P1 = (Pa + Pb)*P1 = P1<br />
這是一個令人稍為驚訝的結果,明明1號客人離主人位子比較接近,但是4號客人拿到禮物的機率卻跟1號客人一樣<br />
<br />
如果我們用同樣的方式去計算其他客人拿到禮物的機率,會發現所有客人的機率都是P1<br />
所以這題的結論是,坐哪個位子都沒有差別,拿到的禮物機率都是1/11<br />
<br />
這真是我遇過的問題中數一數二有趣的題目了哈哈哈哈<br />
<br />
<div>
<br />
<br />
<br />
<br /></div>
</div>
Kuan-Haohttp://www.blogger.com/profile/17347836553446991920noreply@blogger.comtag:blogger.com,1999:blog-1546721632299926868.post-8093714809997485422016-11-28T16:36:00.000+08:002017-03-15T10:52:31.161+08:00國小教育及補習文化<div>
因為認識一些人在國小安親班工作,常常會聽到他們抱怨許多現在國小老師的教學方法</div>
<div>
上課課本照著念、習作在上課之前要先預習寫完 (寫錯要扣分)</div>
<div>
很多聽起來都令人匪夷所思,所以不禁想了一想到底發生了甚麼事呢</div>
<div>
<br />
我覺得臺灣的國小教育發生了一些奇特的現象</div>
<div>
放學之後,有很大一部分的學生下課後會去安親班</div>
<div>
這些安親班老師們會代替那些比較忙錄的家長們督促學生,確認學生能夠順利完成作業<br />
<br /></div>
<div>
<a name='more'></a></div>
<div>
那萬一學生上課沒有聽懂,作業不會寫呢</div>
<div>
那麼安親班老師就必須花時間將學生教會,讓學生能夠完成作業</div>
<div>
久了之後,教學變成了安親班老師的責任之一,甚至會有安親班提供教學課程來吸引更多的學生</div>
<div>
而當有小孩在學校跟不上進度,許多家長也會理所當然的送小孩去安親班</div>
<div>
<br /></div>
<div>
這時學校老師會發現,有些單元還沒教,可是有許多學生已經先從安親班那邊學會了</div>
<div>
有些老師因此進度會上的比較快,而那些沒去安親班的學生如果沒有跟上進度,最後也會被家長送去安親班</div>
<div>
這成了一個惡性循環,去安親班的學生越來越多,教學的責任也悄悄的從學校老師轉移到安親班老師身上了</div>
<div>
所以出現了一些偷懶的國小老師,他們不需要花心思在教學生上面,因為安親班老師會顧好學生的功課</div>
<div>
<br /></div>
<div>
這真的是一個非常奇怪的現象,學生花了八小時在學校上課,可是不一定會學到東西,必須下課後再花好幾個小時把該學的東西學會</div>
<div>
學生一天花這麼多時間在課業上面,他要怎麼去探索自己喜歡的東西呢</div>
<div>
<br /></div>
<div>
同樣的現象也會發生在國中及高中</div>
<div>
安親班或是補習班是必要的,因為一定會有人需要</div>
<div>
可是當大部分的人都需要去安親班或補習班加強學習,我們是不是該仔細想想學校教育發生了什麼事,這是不是代表學校教育的成效不好呢</div>
<div>
<br /></div>
<div>
我覺得這是一個很難解決的問題,在這麼重視成績的教育體制以及家長的觀念下,安親班或補習班太有用了,只是可憐到的是學生而已</div>
<div>
<br /></div>
<div>
<br />
<br />
<br /></div>
Kuan-Haohttp://www.blogger.com/profile/17347836553446991920noreply@blogger.comtag:blogger.com,1999:blog-1546721632299926868.post-86283209144984367712015-01-15T17:12:00.000+08:002017-03-15T11:31:15.560+08:00Machine Learning 助教心得這次來和大家分享一下當助教的心得好了<br />
<br />
這學期是我第二次當台大機器學習課程的助教<br />
機器學習這門課包含了一些理論及分析<br />
所以大部分的作業題目不只要給出答案,還要解釋或是證明答案是正確的<br />
在改作業的過程中,我發現了很多學生不太擅長回答這類型的題目<br />
<br />
<a name='more'></a><br />
證明答案是對的,需要正確的邏輯推導<br />
可是很多學生寫下來的答案卻沒有明確的因果關係<br />
<br />
舉個例子來說明好了:<br />
"如果將天氣分成晴天、陰天和雨天,請告訴我現在外面的天氣是哪種類型,並寫出原因"<br />
<br />
那麼怎麼樣的答案是可以接受的呢<br />
<br />
"外面是雨天,因為我走到門外,不但聽到嘩啦嘩啦的聲音,還被雨滴打到,而且地上濕濕的"<br />
這樣的回答明確了寫出是雨天的具體原因:嘩啦嘩啦的聲音、被雨滴打到、地上濕濕的<br />
然後再由這些原因推出今天是雨天<br />
<br />
那麼會有學生寫出什麼樣的答案呢 <br />
<br />
"外面是雨天,因為我往窗戶外面看,發現今天是雨天"<br />
"外面是雨天,因為今天不可能是晴天或陰天" <br />
這樣的回答有什麼問題呢<br />
<br />
對我來說,這樣的回答跟沒有回答其實是差不多的<br />
我可以用同樣的回答來說明今天是晴天<br />
"外面是情天,因為我往窗戶外面看,發現今天是情天"<br />
"外面是晴天,因為今天不可能是陰天或雨天" <br />
所以這樣的回答其實什麼都沒有說明<br />
<br />
這個例子也許看起來很好笑、很荒謬<br />
可是這就是改作業時會看到的答案<br />
很多學生的回答只是重新翻譯一次題目而已<br />
或是推導了一些無關緊要的數學式子<br />
寫了一些的確正確但是和題目無關的敘述<br />
最後就宣稱他的答案是對的<br />
<br />
這些學生並不是不會解題目,只是他們不知道怎麼把答案和原因寫下來<br />
會解題目並不代表有能力讓別人知道你會解題目<br />
怎麼寫證明,怎麼說服別人答案是對的,這都是需要經過訓練的<br />
如何清楚的和別人表達自己的想法,這絕對是一個很重要的能力 <br />
但是台灣從國小到高中的教育,這部分的訓練似乎不太完善<br />
<br />
到底出了什麼問題呢<br />
<br />
我覺得有很大一部份的原因是因為在從小到大的教育過程中,學生都在寫選擇題<br />
在大量的選擇題評量下,學生只在意答案是否正確,忽略了得到答案的過程<br />
學生喜歡用刪去法,刪掉不對的答案,卻不太擅長直接說明正確的答案哪裡正確<br />
<br />
對我來說,推導答案的過程才是最重要的<br />
能夠一步一步從基本知識推出最終的答案,這才代表學生真的理解了這個題目<br />
清楚知道答案為什麼是對的,才有能力說服別人<br />
雖然這樣的訓練需要更花時間,但我認為這樣才是真正打好基礎<br />
<br />
<br />
讓學生能夠從無到有,培養學生自行找出解答並且說服別人的能力,我想這才是成功的教學<br />
<br />
<br />
<br />
<br />
<br />Kuan-Haohttp://www.blogger.com/profile/17347836553446991920noreply@blogger.comtag:blogger.com,1999:blog-1546721632299926868.post-81722500526275483212015-01-11T15:23:00.005+08:002017-06-02T11:33:58.838+08:00一個小五的數學問題昨天在PTT Gossiping板上看到了一篇文章<br />
有些感觸及想法想要抒發一下<br />
<br />
<a href="https://www.ptt.cc/man/Gossiping/D315/D2E2/DA3D/DA81/M.1427876486.A.B88.html" target="_blank">https://www.ptt.cc/man/Gossiping/D315/D2E2/DA3D/DA81/M.1427876486.A.B88.html</a><br />
原PO說這是小五的數學問題,大家覺得如何呢<br />
<br />
我覺得這個題目很棒<br />
雖然對小五的學生來講,可能思考步驟有點多、有點困難<br />
但是只要經過適當的提示與引導<br />
這真的是一個只要小五學生就能會的數學題<br />
<br />
<a name='more'></a>但令我最不解的是下面的推文<br />
有些人認為這種題目是來刁難學生的,沒有必要<br />
有些人認為可以用三角函數或是其他方法輕鬆得到答案,為何要花時間去思考更簡單的作法<br />
為什麼會有這樣的想法呢<br />
<br />
老實說,我覺得台灣的數學教育並不是很成功<br />
包括老師的教學態度以及學生的學習態度<br />
<br />
在台灣,數學課似乎就只是個學習數學工具的課程<br />
老師向學生們介紹數學工具(畢氏定理、三角函數等)<br />
為了測驗學生們是否能運用這些工具,因此出了許多需要用到這些工具的考試<br />
對學生來說,如何運用這些工具解出題目變成了最重要的事<br />
<br />
但是數學課要學的真的只是這些東西嗎<br />
<br />
高中接觸了數學奧林匹亞三年<br />
得到最大的感想就是:原來不用什麼高深的數學技巧也能解出這麼多數學問題<br />
換句話說,生活中其實有很多看似很複雜的問題,只要思考清晰,其實都很簡單<br />
只是大多數的人不會去想,也不知道、甚至是不相信自己能夠解決這些問題<br />
<br />
我覺得數學課最重要的並不是如何運用數學工具<br />
而是要怎麼解決問題,要怎麼從我們已經會的知識,去產生新的知識<br />
簡單的說,就是學習要怎麼創造這些數學工具,而不是只是學著用這些工具 <br />
所以大多數學生覺得最不重要的證明,我卻覺得是最重要的<br />
因為透過這些證明的過程,學生才能知道這些工具是怎麼從已有的知識推導出來的<br />
以後遇到類似的問題,學生們才有機會自己找出解決問題的方法<br />
<br />
很多台灣的學生,教過的東西表現得嚇嚇叫,成績也很漂亮<br />
可是一遇到從來沒看過的問題類型,只會哀求上課沒教,怎麼可能會寫<br />
這樣真的就是學好數學了嗎<br />
<br />
我不認為,可是似乎很多人這樣認為<br />
<br />
希望將來有一天,這些問題能夠被重視、被思考<br />
<br />
<br />
<br />Kuan-Haohttp://www.blogger.com/profile/17347836553446991920noreply@blogger.com