跳到主要內容

淺讀 AI


我最近在上一些 AI 的課程,覺得 AI 的理論基礎還頗引人入勝的。

幸運地,公司很鼓勵大家學習 AI 相關知識技術,讓我名正言順地探索 AI 的世界。

寫這篇是想藉由寫作整理一下我目前的學習心得。但畢竟我只是初學者,所以以下講的話可能顯得門外漢,還請大家包涵。

1. 所謂的 AI,就是讓機器可以取代許多傳統上以為人類才能做到的事情。好比:辨識手寫文字、辨識影像圖片做分類、翻譯、口譯、理解文章內容、在大量沒有規則的資料中找出規律....等等等。AI 可以運用的範圍無遠弗屆,包括無人駕駛、幫大量文獻寫摘要、人臉辨識、回答客戶問題、語音回話....

2. AI 如何能做到以上這些事情?依照我的方式理解與歸納,主要靠這兩件事:(a) pattern recognition  及 (b)大膽地假設、小心地求證。

 a. Pattern recognition (規律辨識)

    機器要做事,不可能叫他「靠直覺」、「靠本能」。機器是沒有直覺跟本能的。它的直覺跟本能就是你餵一套運算方法給它,輸入什麼 x 它就吐出什麼 y。 Garbage in garbage out — 這是唯一機器能夠運行的方式。

    了解 AI 背後的邏輯就會知道,AI 其實沒有什麼魔法,就是純粹的把所有人類平時的行為拆解拆解再無限拆解,變成一條一條命令餵給機器。

    這有點像舞蹈老師在教跳舞。老師跳起來是舞林高手、神乎其技。但好的老師能把動作一一拆解,把一個節拍的動作分解成二分之一拍、四分之一拍...每個節拍對到哪個動作,如果能夠講解地清清楚楚、分析地准准確確,學生經過千萬次練習,終能學起來,做到跟老師一樣。

    AI  就是我們的學生,而且他是最好的學生,因為他練習千次、萬次、十萬次、十兆次都不會累、不用休息。而我們(工程師與資料科學家們)的工作,就是把我們想要機器學習的事情(說話、翻譯、辨識圖片、寫文獻摘要等等)做拆解。把一個句子拆解成一個一個的單字,把世界上所有的單字分門別類、依照關聯性建模組....把語言分析、分解成有規律的方程式,再教給機器,機器就能學習。

    難就難在語言不是完全有規律可循的。語言是活的、是天天受環境、受使用者而演化改變的。所以語言有非常非常多例外,不是簡單的文法就能包羅萬象。AI 這個學生教它什麼它都學得會。挑戰其實是在於我們人類身為老師的工作。如何讓「說話」這件看似非常複雜的事變成有規則可循、變得有方程式可套用、而且能拆解成一條一條簡單指令寫成程式碼餵給電腦?

    AI 背後的邏輯讓我們理解,世界上所有的事情看似複雜、看似混沌,但其實萬事萬物皆有規律可循。要是沒有規律,電腦絕對學不了。就連語言這般複雜、充滿例外的行為,也是可以找出規則的。就算有千萬種例外,當你把每個例外都建好一對一關係,那也是一種方程式。而電腦厲害的地方是它的容量與運算力量非常強大,再複雜的運算方程式它都能接球。

    這一切對我來說是很有趣的。因為我的媽媽是語言學家,她一輩子都在研究言語背後的邏輯。透過大量的語料做分析、找出規則、找出例外、找出所有的可能性所有  edge cases.... 文法大家都懂,就是一種方程式。有規則的文法,例如說過去式  +ed,這種是最容易教給機器學習的。

    但如何量化語言的其他面向?如何教機器怎麼解讀及運用前後文?如何教機器解讀及運用語調?語言學家幾百年來都在研究人類的語言,試圖找出充滿例外的語言背後的邏輯。沒有這背後的邏輯與規律,機器就無法學習。

    語言學一直是隸屬於文學院,我是看著我媽媽做這方面的研究看長大的。而如今我在學習 AI、理解機器學習,讓我發現除了萬物皆有規律可循,也是萬物皆相通。沒有文學院的語言學家幾百年的研究為基礎就沒有電腦科學的 Natural Language Processing,就無法教導機器學習語言,科技界的AI 就無法發展。 

 b. 大膽地假設、小心地求證

    人類行為背後的邏輯與規律要怎麼找出來?以語言為例,語言學家努力了幾百年,也列不出所有語言的規則,何況語言每分每秒都在改變、演化。

    於是AI 背後的機器學習有另一個大重點,那就是大膽地假設、小心地求證。

    與其一直想破頭想不出語言背後隱藏的規律是什麼,不如就把這難題丟回給電腦。資料科學家把大量語料丟給電腦,然後做出各種大膽的假設。

    簡化的操作方式大致是這樣:

    -- 把大量的資料分成兩堆,一堆是實驗組、一堆是驗證組。

    -- 把實驗組套上第一種大膽假設方程式一,然後跟驗證組比較一下,看看方程式一是否可靠。

    -- 不可靠的話就換方程式二套到實驗組試試看,再跟驗證組比較一下,看看這次效果如何。

    -- 每次實驗組與對照組做比較,就能對方程式進行修正,直到找到最正確最適用的方程式。

    -- 這是一個無盡的 trial and error ,每次都會進行自我修正。

    -- 但精髓就是你不用自己去推出方程式,而是只要大膽地假設,電腦以及龐大的資料庫就可以幫你小心的求證,直到你的假設完全正確為止,就完工。



    



留言

這個網誌中的熱門文章

常聽人說「現在人人都要學會 coding」-- 但到底是要學什麼?從何開始?去哪裡學?

最近換工作,要學很多以前我沒用過的程式語言技術,像是 TypeScript, GraphQL, Relay 等等。於是我上網找了很多免費的、付費的教學影片,像是在 YouTube、 Udemy、PluralSight 等等平台。 但很多教學影片從製作至今已經過了兩三年甚至五六年。在軟體的世界,過一年就人事已非了,何況是現在去看 2016年的教學說明。許多 web packages 的版本在六年間已經從 version 5.x 跳到 18.x 之類的... 因此即便那個教學影片再怎樣的手把手教學都沒有用。資訊已經完全過時。 軟體的世界就是這樣,技術日新月異。圖書館都不願意收舊的 coding 教科書,因為過時的資訊難以幫助到人。 軟體的世界就是這樣,技術日新月異。圖書館都不願意收舊的 coding 教科書,因為過時的資訊難以幫助到人。 許多人常萌生要自學 coding的念頭,但因為不得其門而入,一不小心熱情就會澆熄。身為一個自學 coding轉行當軟體工程師的人,我理解這種感覺。我們身在一個資訊爆炸的時代,但資訊量太大,找到對自己有用的教學資源其實就是自學最困難的一步。 很多人想到要學 coding,會想「課程會不會很貴?」「會不會很難?」「會不會需要花很久的時間?」其實這些問題都問錯了。自學 Coding是個知難行易的學問;如果知道怎麼找自學的資源,不用花多少錢甚至免費就能達成。如果找到對症下藥、適合自己的資源,認真跟著看跟著做也不會難上手。但如何找到那個沒有過時、資訊正確又適合自己的課程?很多人花了大把時間、大把金錢就卡在這個第一步。 我舉一個生活化的例子你就懂了。Ikea 的傢俱你說難組嗎?其實一點都不難,但先決條件是 Ikea的說明文件非常好懂、資訊正確,而 Ikea 家具的品管做得不錯,大部分我們買回家的包裝裡頭零件都正確,因此照著說明書一步一步完成不難還非常有成就感。 但我們也都買過很爛的家具組:說明書沒人看得懂、裡頭的零件缺一大堆,甚至連家具的裁切、材料本身都有問題,大小根本組不起來。不然就是說明書過時了:零件已經改版本了,但說明書沒有更新。如果組一個家具要一直打給客服補貨、換貨,而且甚至問題在哪裡我們都推敲不出來、客服那頭沒人回答我們問題... 我們一定非常洩氣,很快就放棄組家具了。我們一定心想「組家具太難了!」 以網頁開發這塊的 coding來說,...

什麼是 Assertiveness? 你容易被情感勒索嗎?

來到美國後我才第一次聽到 assertive 這個單字。美國人將 assertiveness 視為很高的美德,因為那代表一個人具備足夠的自信、溝通技巧、人際成熟度,以至於能夠堅定、清楚地表達自己想要的與不想要的,卻不會因此傷害他人或顯得傲慢、無禮或威脅他人。 Psychology Today  是這樣定義 assertiveness 的: “Assertiveness is a social skill that relies heavily on effective communication while simultaneously respecting the thoughts and wishes of others. People who are assertive clearly and respectfully communicate their wants, needs, positions, and boundaries to others.  Individuals who are high in assertiveness don't shy away from defending their points of view or goals, or from trying to influence others to see their side. They are open to both compliments and constructive criticism. ” (「Assertiveness 是一種社交技能,依靠的是在有效溝通的同時尊重他人的想法及需求。Assertive 的人能清楚且尊重他人地說明自己的需求、渴望、處境以及社交界線。擁有 assertive 特質的人會積極地說服他人了解自己的觀點,也積極地爭取、辯護自己的想法。他們對於讚美及有建設性地批評同樣地歡迎。」) 美國人如此看重、欣賞的 assertiveness 這個單字在中文卻似乎沒有相對應的翻譯。Google translate 將 assertive 翻成「斷言的、斷定的、過分自信的」;我覺得這些翻譯充滿負面含義且非常不正確。 生長在台灣的我,認為台灣確實沒有 assertiveness 的文化。我觀察到的台灣人,普遍很少直接說出自己想要什麼;如...

薪水談判心得

今天是新工作上任第一天。從今天開始我在 Chase 銀行當軟體工程師。 寫這篇是想要紀念一下我的議薪過程,給下次議薪的自己一點建議。我只寫五點,因為這些是提醒我自己用的。很多很基本的事情,像是不要掀底牌告訴對方自己的底線、無論如何都要議薪不然一定被 lowball 等等太多人說過我就不重複了。 1. 先假設這是一場馬拉松 我的議薪過程非常久,超過一個月。這遠遠超過我想像中的談判 timeline。可能因為對象是銀行業,每個決定都有重重官僚程序,所以每個議薪cycle 來回都好多天。因為我低估了這個過程冗長的程度,就有點像是參加比賽我以為是短跑最後是馬拉松,所以談判到了後半段我就愈來愈沈不住氣。以後的話,我應該要先假設這個過程是馬拉松,先把心態調整好去應對 potential offer,這樣才能以一種「你急我不急」的心態從容應戰。不過整體而言我是蠻enjoy 薪水談判的過程的。這其實是我第一次稍微有點籌碼地談薪水,因為以前每次找工作時,我都是無業遊民的狀態,所以我是比較無法 walk away 的那位。這次是工作找上我,我也是有工作的狀態,我心中比較踏實知道大不了就是不接受。 2. 口頭談判更有溫度 如果上網看各種教人談判薪水的文章,都會看到別人問要用 email 談判還是電話中談判。通常現在的文章都會告訴你,選自己比較有把握的媒介,因為有些人講電話會過於焦慮,那就不要勉強。Recruiter 那邊的話,是一定會想辦法邀請你講電話的,因為口頭溝通就是他的強項。如果你非常不願意用口頭談判,就要堅持以 email 書信回覆。 我以前也大致都是以 email 做薪水討論,但這次我選擇幾乎全程用電話口頭溝通。我跟資方 (recruiter, hiring manager, potential teammates 等)討論工作細節的次數至少十幾通電話。當然是輔佐以 email documentation 把每次討論好的內容白紙黑字寫下來。這次選擇用電話溝通也是憑直覺感覺,沒有特別理由。我還蠻喜歡這個 recruiter 的,覺得他算是很能從我的角度想事情。談到最後簽下 offer 我們互相稱讚了彼此,就像是跟彼此說「這一仗打得好呀!」 我從 recruiter 身上學到的是,口頭談判不用那麼在意口才要一百分。其實他很常跟我講到一半會有點支支吾吾、吃螺絲,但這樣反而顯得自然,不...