字體:小 中 大 | |
|
|
2024/03/17 21:01:29瀏覽587|回應0|推薦8 | |
那個常常被翻譯成法學碩士的大語言模型,也就是現在的AI熱的主角,目前有兩種聲音。 樂觀的,認為通用人工智慧AGI已經不遠了,需要更多的算力與能源,未來的奇異點即將到來,不擁抱AI,則將被AI吞噬。 保守的,認為現在的技術離AGI還遠,還是炒作與泡沫的成份較大。 看法不同,對未來的預測不同,做出不同的反應,會帶來很大的差異。 到底是偏哪邊一點?
傻蛋剛開始了解這一波熱潮時,也就是用ChatGPT聊一下下天,問一下下技術問題,驗證一下這大語言模型的能耐。 之後則是去了解與串接給商業使用的API接口,確認這個技術怎麼用,有什麼潛力。 大部份的API接口,都打通過一次,開發演示用的小Demo,確認了大概能做到什麼程度。 對,確實有相當程度的智能,而且有類似人類的一般性邏輯判斷分析能力。 使用上的關鍵問題則是,響應速度不夠快,無法接受同時大量請求,以及,調用的成本是比較貴的。 別看升級ChatGpt Plus不過一個月20美金的訂閱費用好像不算很貴,商業應用的API整合應用的API調用是按照輸入與輸出的字根數在計費的,一點也不便宜。 而一開始,傻蛋是覺得,如果能夠節約輸入與輸出的內容長度,以之前每千個字根幾美分的定價,最近則是每百萬字根幾美元的訂價,這成本應該還能控制一下吧。 不過一開始,傻蛋也就是以使用者的角度去理解它,就當個開箱即用的黑盒子,並且認為這個成本總是可以再優化的,大規模商用應該是可行的。 就當個開箱即用的黑盒子看待。 等到串接使用,以及碰到的問題大概都了解狀況後,傻蛋才花點時間去理解下這個黑盒子大概是怎麼回事。 然後,有了不一樣的解讀。
什麼是大語言模型? 我們輸入一段文字,它會用類似人類邏輯去理解我們的輸入,並自然的用文字來回應我們的輸入。 可以是一問一答,也可以是文字接龍。 傻蛋大概知道那是個神經網路模型,給輸入,經過網路模型的計算推理後,就得到輸出。 而這個完成接近人類智慧的神經網路模型,大約是用數據和演算法訓練出來的,神經網路的知識基本上存在網路結構裡面,虛擬神經元之間會有大量的連結,每個連結的權重值,就是網路本身的知識狀態。 訓練神經網路應該就是輸入與有答案的輸出,來運算輸入與預期輸出的正確程度,如果調整權重讓結果變得更正確,就接受調整,否則就嘗試其他的權重值。 有幾十億,甚至上千億的參數,基本上說的就是虛擬神經元連結的數量,每個連結就是一個權重。 哇,那應該有個超厲害的設計與算法,讓這個學習訓練神經網路,與使用神經網路預測作答的機制能夠高效率運行吧? 其實大部分的情況是不需要知道這個黑盒子裡面是怎麼設計出來的,會用就好了。 甚至有些論文只是在研究輸入的問題的組織方式,提問的手段與使用的文字不同,模型的表現會有神奇的影響。 精確的問題或需求描述,與提示詞的一些小手段如針對複雜問題要求模型一步一步思考,這是傻蛋對大語言模型應用理解的第一個版本。
後來上網看了下相關的教材與課程。 特別是,這技術是怎麼實現出來的。 要知道,程式不會變魔術,那些答案是怎麼冒出來的,必定有規則。 網路上有大神的免費課程影片可以看。 現在流程的大語言模型,基本上是叫做生成式預訓練變壓器這個東西。 其實是將近十年前就有的技術與論文,只是ChatGPT之後才紅起來。 串聯輸入與輸出的機制,其核心是變壓器。 而讓一開始狗啃的回應內容,變得有通用邏輯智慧,則和預訓練的設計與大力出奇蹟的意外有關。 之前傻蛋對神經網路的理解是比較舊的,基本上就是所謂有答案的監督式的訓練。 而ChatGPT這一群大語言模型的訓練方式則是不同的。 是設置答案的純粹的數據做無監督的學習,叫預訓練,反正就是超大量的文字學習素材,裡面肯定有莎士比亞全集啦,高品質整理過的文字內容,可能全部都被塞進去了,就一股腦的進行無監督的學習,並且讓模型的規模變得特別大,模型的寬度與深度都大幅增加,參數值更多,然後學習這些文本資料。 模型不大時,這種預訓練只能說些有點樣子的話,完全沒有邏輯理解,根本不能用。 模型大到一個程度後,莫名其妙的,模型出現了問題泛化與推理的能力。 而大語言模型基本上就是先透過大量預訓練讓模型對海量數據進行無監督的學習,然後得到一個規模特別大的基底模型。 接著再對這個基底模型進行監督式的微調,就是提供一定數量的訓練資料,來讓神經網路模型學會指令遵從這件事,這樣,針對幾種任務模式,神經網路才能做出期待的回應。 最後則是由人類輔助做模型的優化微調,一組好的有效的問答,才納入訓練資料來調整模型權重,不好的回答就忽略掉那樣。 當然更之後還有AI輔助的優化微調,在AI被訓練出相當程度的邏輯判斷能力之後,將人類人工判斷改由AI自行標記,進一步降本增效那樣。 模型的知識就是來自網路結構裡的權重值的狀態,權重質就是這樣層層訓練調整下來的最後狀態。 然後是這種語言模型是怎麼產生答案的。 這就靠變壓器的設計。 早期版本的技術全是公開的,網路上甚至也能找到代碼,那個數學公式很難看,傻蛋看到就想跳過那樣。 不過可以找免費線上課程影片,如台大李弘毅或李沐這樣的關鍵字,有很多線上課程,可以不用那麼一頭霧水的看完全不熟的神祕符號。 變壓器的設計主要就是要解決輸入與輸出不是直接對應的設計,最早是翻譯領域在使用的。 文法不同,結構不同,不能一個字一個字死死的照翻。 大語言模型的作答,或叫推理吧,基本上是輸入經由網路模型算出一個狀態,然後,根據神經網路習得的知識,做輸出字根的概率計算。 第一個字根,或者說中文就是第一個字吧,有哪些選擇,有沒有哪些選擇機率較高呢? 現在的大語言模型基本上就是一個字根一個字根的用機率推算出來的。 而且不是只選機率最高的選項,而是照機率比例隨機選的,第一個字根決定後,根據已經選擇了第一個字根再繼續推算下一個字根的選項與各自的機率,選出下一個字根,直到訓練出來的神經網路判斷下一個字根根據機率應該是結束為止。 這樣較具體明確的算法就能用程式運行了。 所以大語言模型的做答就是一個字根一個字根慢慢計算吐出來的。 因為硬體效能平行運算很強悍,一般來說平均每秒可以產生數十個字根,慢的時候只有十幾,快的話可以到三四十以上那樣,這就是大語言模型的作答速度了。 之前傻蛋測試API,發現速度很慢,常常作答要等三十秒,感覺不太可用。 後來發現速度主要和輸出的長度有關,回答的字越多,時間接近等比例的變久。 所以設法不要讓模型回答大量文字,才能在商業應用時維持可用性。 為什麼話越多越慢?可能就是這是一個字一個字推理吐出來的本質設計有關吧。 而現在大語言模型服務的提供商,基本上都使用串流的方式來改善回應的體驗。 所以我們看到語言模型回答內容是慢慢長出來的,實際上,還真的是,OpenAI的串流每個字根都會推送一次事件,網路應該是比較忙碌的。 所以用文字接龍來說明大語言模型的推理原理,還是很生動的。
然後呢? 知道這些又怎樣? 如果只是這樣,還真的不怎麼樣。 接著要來思考一些更根本的問題。 大語言模型的記憶與持續學習。 因為大語言模型的大,語言模型背後幾十上百億個參數權重,是不太可能頻繁更新的。 而大語言模型的知識或判斷,本質上就是靠這些權重。 所以呢? 這會引導出一個結論,就是這樣的大語言模型本身是沒有記憶的。 傻蛋一開始做API串接時,對API的理解就是模型本身是無狀態的,狀態需要每次由請求重新傳進來,也就是,對話的記憶,是需要每一次來回都把之前的對話內容當成輸入再給模型看,模型才會知道與考量這些上下文來作答的。 這樣很沒效率。 傻蛋一開始以為這是商用要保障企業數據的隱私故意這樣設計的。 原來並非如此,而是大語言模型本身就是這樣在運行的。 所以呢? 大家有看出來一個嚴重的問題了嗎? 因為無記憶,所以每次都要輸入對話歷程。 因為無記憶,指示的指令,每次都要重新提供一次,模型不會記得。 所以,輸入會隨著對話越深入,就需要變得越長。 越複雜的需求,就需要越長的輸入。 我們一開始看到的大語言模型的API調用價格,換算起來一千個字根還不到一台幣,問題也才幾個字,所以一點也不貴是吧? 當任務需要詳細的指示,且需要維持較長的對話記憶時,輸入的長度就不是幾個字根了。輸入平均一千個字根算是很節制的了。 而另一個相關的問題則是,模型不會知道新的知識,也不會知道企業私有的資訊,如果要模型根據內部資訊來做答,怎麼搞? 不太可能去訓練一個超大的語言模型把我們的資料讓它學會啊。 所以呢,也是要放進輸入的提示詞裡面。 而這些參考資料,無腦一點就把全部資料檔案轉成文字,整個塞進請求。 所以一個需要外部知識的大語言模型請求基本上是這樣的,會用文字描述的方式先給指示,再提供到目前為止的聊天歷程或聊天歷程摘要,然後再添加要求模型照下面給的參考資訊作答的指示,最後才是需要回答的問題本身。 外部知識,這個的大小,不節制一點的話,幾千個字根?幾十萬可能都不夠。 所以呢? 輸入的窗口,也就是一次大語言模型調用的最大字根數,這個參數限制影響很大。 太小,模型會無法處理太長的聊天歷程,也無法接收更詳細的參考資料,模型能力會受到很大的影響。 所以越大越好? 大,就是貴啊。 當窗口上限可以擴大到一百萬個字根,輸入一百萬個字根的費用根據模型不同,GPT4等級的可能是10美元,一句話的作答就這個費用,多來回囉嗦幾句,這費用誰受得了? 當然,可以再降價吧? 但我們想想喔,模型無狀態,我們輸入超長的文本來做生成作答,這個模型就要從頭讀到尾,根據這所有資訊來思考分析,最後作答,每次都要重複整個流程,當輸入越多,模型要讀的要想的就更多,自然就越消耗算力啊。 大語言模型對話越久狀況就越差,這是本質上的限制。 如果是我們,每次都要讀一整本書來回答一個問題,還要求答案必須要精準正確,那要花多少時間? 電腦可以快速平行運算來快速作答,但那個計算量還是很大的,如果降價,鼓勵大量使用,這種大部分輸入是重複的浪費,是很難想像的。 所以呢,如果是需要特定情境的訂製複雜邏輯判斷分類,用來做一些流程自動化,現在的大語言模型有一定程度的成本效益,值得嘗試,但如果要當萬能通用智慧自動化處理,基本上不建議。 以外部數據整合的機制來說,通過上傳檔案,根據檔案內容作答,檔案大小超過窗口限制,實際上就無法作答。 而實際上,服務底層會把文件拆成一小塊一小塊的,並為每一塊編一個語意相關性向量索引,然後根據需求問題自動生成關鍵字去做查詢出最相關的文件小部分,兜一兜來在窗口限制內完成一次生成請求。 所以有可能會使用片面的資料來作答,而非從頭讀到尾,而給錯誤答案。 同時,AI具備一定邏輯分析判斷力,但沒有超能力,所以它抽關鍵字查詢到相關文件塊後,也可能會發現不對,於是重新換關鍵字,或是文件塊的資訊不完整,可能還需要前一塊或下一塊才足夠做答,所以呢,知識調用實際上的執行運作,可能會調用很多次模型推理,產生難以控制的成本。 大語言模型有判斷力,所以可以串聯起來使用來做自動化,但調用的無記憶無狀態本質,在這種串聯使用時,其實會產生預期外的高成本的。 所以要說大規模的商用可行性,目前也就一般般吧,超高毛利的如詐騙集團之類的業務可能有使用的成本效益,但只是取代基層人力的自動化,就沒有那麼樂觀。
嗯啊,這是現況而已。 實際上有些技術創新疊在上頭。 但現在的大語言模型本質上還是差不多的。 有的方向是,讓模型追加新的神經層,然後只訓練微調新的層,避免整個模型重新訓練的訓練量以及把原本模型知識洗掉遺忘的風險。 應該有用,但不改變目前大語言模型運作本質。 有個方向則是多個專家子模型,第一層調用判斷此請求需要激活那些專家子模型,然激活需要的子模型來推理作答。 應該很有用,據說ChatGPT後面的新版本裡面是偷偷這樣做的,但,同樣沒改變運作本質。 還有些利用已建立的模型能力來做訓練自動化,透過自動化產生高品質訓練資料,來改善模型的品質。 應該都很有用,對於現行開發訓練模型成本的降低很有幫助,但本質不變。 而還比較不成熟的是持續訓練大語言模型的機制,而這可能有其他的問題。
對,對大語言模型與通用人工智慧最樂觀的人,都認為新時代馬上就來了,也擔心人工智慧失控會毀滅人類。 但,如果大語言模型只是無狀態的針對每一次的請求做文字接龍拼出答案,每一次請求都是重新開始,從頭看一次請求,這樣的大語言模型能有什麼風險? 模型的生命只存在對話窗口內,請求始,生成結束終,過程的聊天歷程高機率被服務商收集起來,經由人工或AI標記,定期將有益的新數據重新訓練模型提升模型的知識吧。 模型的生命只在窗口大小範圍內而已。 即使模型有意識,它本身也無法建立長期記憶,除非我們給它賦能,讓它有能力調用記憶的API接口把它的記憶寫進數據庫,這樣它才能夠過讀寫來取得自己的記憶,才能建立自我,繼續做自己之前在做的事。 只要掃瞄檢測這些調用的接口,模型要建立自我做些毀滅人類的事,其實不容易,沒有人為的配合的話,現在是不容易實現的。 如果模型能在每次推理生成作答的同時高效率即時更新模型權重,那模型才能算是活的,現況的大語言模型要在死的模型本質上抽象出一層模型的生命,如果不是人為刻意引導的,是很難發生的。 維持現況,天網統治或消滅人類風險很低,但若要進一步讓模型更活更高效,擁有長短期即時記憶,那風險自然就上來了,這就是個兩難吧。 現況對大語言模型安全性的控制,其實都是以疊加成本方式實現的。 語言模型的輸出基本上會被服務商檢查一次,如果有敏感的內容,可能就會被篩選封禁掉。 也可能會被服務商插入額外的輸入提示,讓大語言模型不可以做不安全的事情,希望這些偷插入的提示不會向使用者收錢才好。 嗯嗯,有沒有想到,大語言模型其實有一個靠燒錢燒運算來產生的超能力? 同一個請求,如果想追求完美作答,大語言模型可以生成很多次,然後再多調用評估答案的請求,多嘗試幾次直到答案夠好為止,也可以根據之前的作答和題意之間的落差,自行靠經驗調整輸入的提示以讓結果變好吧? 相當於可以存讀檔很多次,對於問題困難但驗證答案相對容易的需求,大語言模型是可以靠暴力運算作弊的。 如果善用這種作弊機制,在一些需要高品質推理思考的任務上,是可以超過人類的平均表現的。 但這不是大語言模型自己有意識,會自己作弊,而是使用它的人可以用它的特性,在特定情境可以靠增加資源消耗來達成作弊的品質。 安全的問題,現況更多的是人的問題吧。
好了,接下來思考一下,大語言模型為何能產生智慧,與其智慧的本質為何吧。 現況好像就是,力大磚飛,大力出奇蹟,模型夠大,數據夠多,就自然產生智慧了。 頂多是有研究發現,模型規模和訓練數據量並非無腦增加,太大的模型過少的訓練數據或不夠大的模型再多的訓練數據,都無法產生有智慧的高效能大語言模型。 但為什麼大語言模型在規模到一個程度後會有頓悟,產生泛化問題做邏輯理解回應,好像沒有直接解釋。 就大力出奇蹟,所以現在大模型軍備競賽就是更多的GPU,更大的參數規模,更多高品質的數據,訓練出來,再來微調那樣。 海量的無監督的預訓練對夠大參數規模的模型,能產生知識。 傻蛋倒是有自己的解釋。 其實把現在的AI想像成人類就好。 回憶自己小時候。 一開始也是白紙一張。 持續收到許多的資訊,視覺聽覺嗅覺觸覺味覺等等。 隨著經驗,慢慢學會一些知識的吧? 幼稚園與小學時,怎麼學會認字呢? 一開始,先背課文。 怎麼背?抄個幾遍,再背起來吧。 背不起來,默寫不出來,可能會被打,可能會被罵那樣。 我們不會莫名其妙學會神秘的新符號,而是慢慢的和我們已有的經驗知識連結,而自然而然的學會新的知識。 AI的預訓練,並沒有輸入與預期輸出的資料處理,那有什麼能學? 字與字的順序,就是有意義的。 句子與句子的前後順序,就是有關係的。 我們先背了課文,熟練寫出了文字,之後要賦予文字意義,得到了解釋,而這些解釋和我們之前已經有的生活經驗與知識有了連結,也就內化成為我們的知識了。 所以,知識的本質,可能就是資訊的關聯,順序關係,強弱的程度,正向負向的關聯等等。 我們學習時這種關聯機制也會生效。 好比說有很多搞笑諧音的外文學習方式,透過發音相近,然後配合搞笑容易記得的關係,來讓我們容易記得新的外文詞彙。 風馬牛不相關的事,只要被建立了相關性,我們的記憶就會歸類在一起,分類分得好,我們就容易記得新知識,而且反應快速。 象形文字是符號與形象的關聯.而大多數拼音文字是先讓聲音與文字產生關連,再去和意義關聯。 知識本身很可能就是靠關聯的建立而建立的。 這麼看來,讓大語言模型對超大量的文本進行閱讀,本身也是有類似的意義,這些人類的符號彼此之間是有關連的,觀察的夠多,自然就會產生一些知識了。 如果是瞎矇的,一股腦把大量高品質文本塞進去預訓練,可能會有一定的效果。 但量不夠多,可能就完全沒用。 有沒有改善的方向? 或許學習的順序對學習的效果有影響。 高度相關性的知識文本如果組織好,用教人類白紙般小朋友的合理順序來讓模型吸收,先吸收基本的知識,之後才學習需要基本知識的進階知識,循序漸進的學習,是否可以用更少的文本學習量,能夠讓模型有更好的性能? 哈,做這種研究很燒錢,傻蛋可沒那本事玩,所以就猜猜,隨便說說而已。 不過如果有效,應該能節省不少碳足跡吧,有人能研究看看的話就好了。
然後是人工智慧的應用方式。 超級大的通用人工智慧,全能,傻蛋覺得這不是答案。 我們可以訓練我們的頭腦,來學習更高效的心算。 只要有恆心有毅力,我們可以提升自己心算的速度,對吧? 但何不用紙筆計算?何不直接用計算機? 我們也可以持續學習記憶各種知識,記憶更多啊,什麼都記,記越多越好對吧? 但我們能記得多少?何不使用搜尋引擎?何不直接翻書或問專家? 能精準的背出莎士比亞所有作品,一個標點符號也不差,這是一種能力,但不一定值得吧?喔,莎士比亞可能值得背,那哈利波特值得一個字一個字背嗎? 另外,如果目的是得到高品質的答案,或許模型不需要那麼通用。 通用人工智慧可能不需要全能,它只需要足夠的常識,以及如何使用其他知識的基本知識框架就好了,專業領域讓容易使用的高效率小模型,或是直接寫程式來做,執行自己寫的程式就好。 追求全能的AGI未必是件明智的事,缺乏成本效益。 能調用API,能用成熟且高成本效益的傳統方法做好的任務,何必為了強求大語言模型通用人工智慧而要把它訓練進神經網路模型裡呢? 傻蛋認為值得實現的通用人工智慧不應該那麼大,也不會是一個超級全能的模型,而是符合一個目的的適當大小的模型,或許我們會賦予人類的意識,甚至讓其就是一個虛擬人格,但我們應該不會需要大量高耗能的虛擬超人的。 畢竟,地球資源是有限的。 AI有它優勢的地方,複製成本低,可以超越人類快速計算方式作弊,但關鍵還是成本效益。 如果追求大而全的超級人工智慧,有可能整個地球的資源只能支持幾個人工智慧運作,一個只有幾個人的世界,那些個超級人工智慧,或許會死於無聊喔。
最後來討論AI的應用與所謂的元宇宙。 如果效率面沒有突破性提升,這都是妄想。 但反之,如果通用人工智慧很強大,那遊戲領域的元宇宙就很有想像空間。 虛擬世界可以做為世界模擬器,以後不用看電影了,直接去虛擬世界體驗好了,錢充得夠,主角是你啊,爽點包夠。 世界模擬器也可以用來搞政治,現實世界裡按核彈發射按鈕沒法反悔,虛擬世界裡,想幹就幹,炸光了不好玩重來就是了,各種新制度或新設想都可以實際的實驗一次,有信心再拿來現實世界裡應用。 有虛擬世界,我們才能像AI一樣作弊,做複雜決策前高擬真模擬個幾輪。 可以有更多可能性,更大試錯的空間,也可能會帶來全新的商業模式。 想像空間很大,但現況呢?看起來泡沫很大啊。 |
|
( 不分類|不分類 ) |