監督與非監督式學習(GAN)

王柏鈞
6 min readMar 12, 2020

--

認識AI小說系列02

友人的學校 學生餐廳

<a href=”https://www.freepik.com/free-photos-vectors/background">Background photo created by mrsiraphol — www.freepik.com</a>

在前一次聽完年輕人對於AI的意義以及方法做出詮釋後,友人心裡似乎完全理解了AI的意義,回到學校後,也試著告訴其他人AI到底是什麼。

友人:「所以說,AI就只是在分析和處理人類給他的資料而已,然後拷貝以前曾經做過的決策,所以其實你只要用Excel去做一些分析,根本就不需要使用AI。現在AI這麼紅也是一種噱頭啦。」

同學:「是這樣嗎?可是還是有些特例吧?」

友人:「沒有啦,我朋友他專門做這個的,他都這樣講了。AI不能處理人類沒處理過的問題啦。」

但他正在說著的時候,心裡也產生了「真的是這樣嗎?」這樣的情緒,於是他決定下一次去找年輕人時要仔細地問一下這個問題。

在年輕人家

<a href=”https://www.freepik.com/free-photos-vectors/flower">Flower photo created by kjpargeter — www.freepik.com</a>

友人:「上次你有跟我說,所有AI都只是在分析和處理人類給他的資料而已,然後拷貝以前曾經做過的決策而已,可是真的是這樣嗎?我之前到處跟朋友講可是我不太確定啦。」

年輕人:「這邊有一點小誤會,AI的確是用來在分析和處理人類給的資料,然後根據以前的決策經驗來做出適合當前狀況的決策。這一點是沒錯的。但並不是所有AI都是這樣。」

友人:「並不是所有?你的意思是AI還有其他I?難道是BI?」

年輕人:「不是BI啦。AI其實有分成兩大種類,分別是監督式學習和非監督式學習。如果說我們有一筆資料,那它其實分為描述當時情況的資料X和所下的決策y。

  1. 監督式學習就跟你說的一樣,他會參考過去的資料X和與之相對的決策y,找出在現在的情況下人類最可能做的決策。
  2. 而非監督式學習則是不需要過去的決策y,他會自己在所有資料X中,找出誰跟誰最相近並組成一群,而每一群資料X再來對應一個資料y。

所以非監督式學習的前提就是,我們相信當我們在不同的時間點下了同一個決策時,他們的情況,也就是資料X應該看起來相似。

你可以看看下面這個圖,左邊這張圖是原來的一大群資料點,而我們使用非監督式學習的k-means演算法,來把他們根據距離分成紅、藍、綠3群。」

所以即使我們本來不知道他是哪一群,使用非監督式學習的時候,我們也可以根據空間位置的相似性,來幫他們找到一個家。

https://mropengate.blogspot.com/2015/06/ai-ch16-5-k-introduction-to-clustering.html

友人:「其實你這樣說我好像懂,但應該是還沒懂,所以這個可以用在什麼地方?」

年輕人:「我想想喔,如果要說最近最紅的非監督式學習應用,應該是Deepfake吧?說起來還是你告訴我的。」

友人:「我告訴你的?」

年輕人:「對阿,你之前不是在群組裡丟了一個周子瑜外流影片?其實是假的那個。」

友人:「喔喔,我想起來了,那個真的讚,雖然說是假的我也看不出來啊,很實用捏。」

年輕人:「哦...好喔。容我句點你一下。總之,那部影片是透過一個叫做DeepFake的AI專案做出來的,這個DeepFake的AI專案是基於一種稱為GAN(生成對抗網路)的技術做出來的,他也是一種非監督式學習的應用。雖然他還是有用到一些人類的決策啦。」

友人:「真的假的,AI也可以這麼「實用」喔,這個GAN我有興趣你趕快教我。」

年輕人:「好啊,不過他會稍微複雜一點喔你要仔細聽喔。」

年輕人:「首先,GAN這個AI,其實包含了兩個模型架構,你可以把它當成兩個AI。

  1. Discriminater (鑑別網路)
  2. Generater (生成網路)

而生成網路才是我們想要的目標,他的功能就是如你所願,生出假的周子瑜。

一開始我們的生成網路是非常天真(Naive)的,他的輸入是一個隨機的向量,然後他會根據這個向量生出一張圖片。
你還記得我們之前玩的創世神嗎?在創建世界的時候不是可以輸入種子碼,然後就可以生成跟別人一模一樣的世界嗎?所以創世神的地圖其實就是按照種子碼來生成的。而生成網路也一樣,他會根據這個輸入的向量產生一張圖片。只是這個時候因為他沒有經過訓練,所以這個時候生成的周子瑜不說輪廓,你連線條都看不出來。

https://www.youtube.com/watch?v=CGTYjp3vpzs

那麼照理說,我們只要不斷的告訴這個生成網路,你現在生成的圖片有多像周子瑜,慢慢的他不斷修正,然後生出一張周子瑜了。

但是,就是這個但是,我們不可能用人工來告訴他,太耗時了,而且人類也不擅長評估好有多好,壞有多壞。比如說你可以分辨你今天吃的牛排和昨天吃的便當,究竟牛排可以比便當好吃幾個百分點嗎?」

友人:「恩...應該不行吧?就是好吃阿。」

年輕人:「沒錯,但是這個幾個百分點的優劣,對於我們訓練生成網路是很重要的,沒有差異就不能訓練生成網路。所以我們找到一個方法,就是用另一個AI來告訴生成網路,到底你生成的圖片有多像真實照片中的周子瑜,這就是鑑別網路。

我們需要讓鑑別網路不斷的看真的周子瑜的照片,也讓他不斷的看生成網路所製造的假的周子瑜的照片。直到他完全能夠分辨其中二者的差別。

接著,我們就可以透過鑑別網路來告訴生成網路,他生成的照片到底有多像真實的周子瑜了。藉由這個答案我們就可以不斷訓練生成網路,讓他生成的圖片越來越像真實的周子瑜,直到鑑別網路被欺騙過去。

在鑑別網路被欺騙以後,我們就停止訓練生成網路,然後繼續用真實的周子瑜圖片和生成網路製造的假周子瑜圖片來訓練鑑別網路,直到他再次能夠區分兩者差別。

然後再用鑑別網路來訓練生成網路,直到生成網路又能夠騙過他。就這樣不斷地循環對抗,直到我們覺得生成網路所製造的照片已經非常不錯了,就停止這個循環,接下來你就可以自己製造周子瑜照片啦。」

友人:「喔喔,原來這個生成對抗網路的「對抗」是這樣來的啊,其實有一種道高一尺魔高一丈的感覺ㄟ。」

年輕人:「沒錯就是這樣,孺子可教也。」

--

--

No responses yet