一方面我不喜歡Andrej Karpathy 總是發明新的概念,一方面又不得不承認他確實很多想法是很有價值的。 例如這裡對Software 1.0/2.0 的定義就蠻好的: 1). 軟體1.0時代,容易自動化的是你能明確告訴電腦怎麼做的事情。 2). 軟體2.0時代,容易自動化的是你能自動驗證結果好壞的事情。 那這裡的自動化都什麼意思呢? 1. 軟體1.0:靠指定規則(Specify Rule)自動化 過去的幾十年,我們使用的所有傳統軟體(如Excel、Word、會計系統),都是「軟體1.0」。 它的核心邏輯是「指定」(Specify)。 你必須像個事無鉅細的監工,把每一個規則都用程式碼寫得清清楚楚。例如做個會計軟體,你必須告訴它: “如果A欄的數字大於B欄,那麼C欄就顯示紅色。”“月末,把所有D欄的數字加起來,放到Z欄。” 軟體1.0擅長什麼? 自動化那些規則固定、邏輯清晰的任務。 軟體1.0解決的是什麼問題呢? 是人類的「機械性重複勞動」。例如打字員、記帳員、算帳員。只要一個任務的全部流程能被清楚地描述出來,軟體1.0就能接手它。 2. 軟體2.0:靠指定目標(Specify Objective)自動化 現在,AI 來了,升級到了軟體2.0。 它的邏輯完全變了。我們不再是指定規則,而是設定目標。 我們不再像監工一樣告訴AI每一步怎麼做,而是像個教練,只告訴它驗收的標準是什麼。 例如訓練AI下棋。我們不告訴它「當對方出這一招,你就必須走那一步」。我們只給它一個目標:「想辦法贏棋」。 然後,AI 就開始自己搜尋那個能贏棋的步驟。它透過海量的自我對弈(也就是梯度下降)來尋找最佳策略。 這就是AK 的核心觀點:軟體1.0是我們手動寫程序,軟體2.0是AI自動搜尋生成程序。 3. 軟體1.0 時代看「可指定性」(Specifiability),2.0 時代看「可驗證性」(Verifiability)。 如果說軟體1.0 自動化任務的標準是我們能不能指定清晰的規則,比如說你要寫個自動抓取的爬蟲,只要指定清晰餓抓取規則和解析規則就可以了。 那麼軟體2.0 自動化任務的標準就是結果是不是能自動被驗證。 「可驗證性」就是AI能不能在一個任務上進行高效的「刻意練習」。 AK 給出了「可驗證」的三個關鍵條件: 1). 可重置(Resettable) AI必須能夠無限次地重新開始嘗試。例如下棋,這局輸了,沒關係,棋盤一清,馬上開下一局。 2). 高效率(Efficient) AI的練習速度必須遠超過人類。它可以在一小時內「看」完人類一輩子都看不完的視頻,一天內下幾百萬盤棋。 3). 可獎勵(Rewardable) 這是最關鍵的一點。必須有一個自動化的、即時的、沒有爭議的獎懲機制。 自動化至關重要。如果AI每次做完一件事,都需要一個人類專家來看半天,然後給個模稜兩可的評價(比如「嗯,這個創意還行」),那AI就沒法高效學習。 像是在程式設計、數學領域就很容易符合上面的三個條件,但是像寫作這種非標準化的就很難驗證。 但對於軟體來說,稍微複雜一點的軟體系統,其實很難達到可驗證的標準。 比如說我在實現UI 時,會嘗試把UI 設計稿丟給AI,然後給AI 一個截圖工具,讓它反覆截圖對比設計稿,然後找出差異優化,但是以目前的AI 能力,還不足以修復這些差異,所以無論你運行多久,也不會真的得到一個理想的結果。 這可能是我不太喜歡AK 發明的這些新概念的原因,總是提出一個個概念,但並沒有解決太多問題。
這配圖畫的挺好的👍
