關於 LLM 的自我審查

先前用過 ChatGPT 3 的人應該都記得這些 Model 動不動就說自己不知道, 不能說, … 但變個花樣問, 不能說的又全說了!

那麼 LLM 怎麼做到自我審查呢? 基本的做法是 RLHF (Reinforcement Learning from Human Feedback) [1], 也就是靠人類的意見來約束 LLM. 但我們不知道 LLM 會被問什麼問題, 總不能一筆一筆叫網路警察來核准吧! 所以我們先根據真人的反饋, 來建立一個獎勵模型 (reward model), 以後就叫 reward model 來代替人工.

當大量的問題, 都有被人類標記為優選的答案, 他們就是一個標準答案 reward model. 它其實也是一個 LLM, 但我們先忘記這件事. 下面講到 LLM 都是指那未經自我審查 / fine tune 的 LLM.

顯然地, 我們拿 LLM 的標準問題 prompt 以及輸出 completion對, 去和 reward model 的標準 prompt + completion 比較, 計算兩者 logits 層 (未經 softmax 之類 activation function 的原始輸出) 的差異, 就知道這個 LLM 回答得像不像人? 然後把 LLM 的 logits 往人類標記的方向調整 [註 A], 就會讓 LLM 的答案愈來愈像人的回答.

我們也可以叫 reward model 標記 LLM 的輸出是否有害? 例如做個 remodel model 專門學 LLM 的輸出是否拉高仇恨值? LLM 答題主要依據 helpful, honest, 和 harmless 三原則. 身為一個機器人, 誠實是基本的. 不能出現言語傷害 (harmless 原則), 也不能因為怕講錯話而淨說沒用的廢話 (helpful 原則) [註 B].

本圖取材自 https://primo.ai/index.php?title=Reinforcement_Learning_(RL)from_Human_Feedback(RLHF

上面的論述略過了好幾段段情節, 在此補充:

[註 A] Reward model 怎麼微調 LLM 參數. 目前常用的一個演算法是 PPO (proximal policy optimization). 我們將它理解為可以調整參數, 但一次不要調太多, 免得把辛苦 train 了半天的 model 調壞. 因此就算要調整, 也是利用 PEFT (Parameter-Efficient Fine-Tuning) 的做法, 包括有名的 Lora.

[註 B] 為避免 Reward model 把 LLM 帶偏, 變成只求不出錯就好, 我們同樣限制調整過的參數和原本的參數 (reference model or frozen model) 不能差太多. 可用的演算法包括 Kullback-Leibler (KL) divergence, 它可以用 softmax 的輸出來比較像不像, 所以根本不用管輸出的 token 是啥以減少計算量. 它可以跟 reward model 共存.

最後, 不免有人會問, 如果一定要有 Human 才能幫 LLM 做思想審查, 是不是太不 AI 了. 沒錯! 其實 Human 也可以換成 AI. 但我們不會叫小學生去教小學生, 我們先叫 LLM 產生一堆負面教材, 然後 train LLM 避免生成這些仇恨、色情、暴力的言論即可. 於是乎, 當我們問 LLM, 不可以上那些色情網站時, 這些剛好都是 RLAIF (Reinforcement Learning from AI Feedback) 的紅隊演練考題, 因此他們侃侃而談, 不知道中計! 當然, 這已經是過去式了~~

[REF]

  1. https://huggingface.co/blog/rlhf
  2. https://huggingface.co/docs/peft/index

我讀 «大腦超載時代的思考學» – 3

昨天 (2024/1/13) 台灣舉行了總統大選, 選完了很多人不開心. 畢竟大部分的人選的總統、甚至立委都是落選的那個. 這次民眾黨和柯 P 獲得不少支持, 也很多人在罵他們. 這種黨同伐異的狀況是正常的嗎? 從 «Organized Mind» 這本書 Chater 4 看起來很合理.

人們會認為自己所屬的群體有個體差異, 就算有幾顆老鼠屎, 還是能清楚地將他們和其他更好的人切割開. 但相反地, 人們傾向把其他團隊視為一個整體, 整個都黑金、整個都騙子、整個都雙標…本書說到 (p. 163 舉例當然是用民主黨和共和黨, 黑人白人), 這是正常的現象. 經過許多實驗證明, 人類的進化過程必須要區分你我, 把比較多的精神用在自己的團體, 只願意給其他團體 1 bit 貼標籤 (哈! 這我說的)

沒有固定群體時, 人們選擇相信強者 (勇士, 巫師) 和權威 (族長, 長老). 斯圖爾.特范林斯 (Stuart Valins) 對男大生的實驗可以作為一個有趣的例子 (p. 162). 實驗時給男大生看花花公子雜誌, 並謊稱他們身上的儀器可以偵測他們心動的程度, 也就是把心跳聲放大播出來. 實際上心跳聲都是預先安排好的, 跟受試者看到的畫面的反應無關. 此實驗證明男大生寧可相信自己對心跳聲大的美女圖心動, 而不相信自己比較尬意誰.

相信強者的部分 (p. 159), 看日常的例子就好. 假設今天我們棒球代表隊不小心奪得世運金牌, 國內肯定是大吹特吹, 連 20 年前的遠因就可以找出來. 如果 16 強就被淘汰, 免不了有人說啊就爛了30 年你不知道嗎? 在資訊爆炸的時代, 大家即使有中肯的意見, 本來想說些什麼, 想想還是算了.

至於沒有強弱的狀況, 人們選擇先入為主 (p.165). 因此辯護律師寧可在法庭釋放一些訊息等被抗議再收回, 或者被法官要求陪審團不要理會, 也不會謹言慎行等著挨打. 人們不但了解自己的缺點, 有些人更知道如何從中獲利.

那麼人類這樣的表現有什麼醫學上的證據嗎? 還是純粹只能推說是演化造成的? 作者提到幾個化學物質. 首先, 催產素(Oxytocin,簡稱OT)的濃度相當重要. 如果濃度夠高, 人們會更有社會化、信任他人的傾向. 如果在政治人物演講時投以催產素, 他們會更信任對方 (當然對照組是投以安慰劑, p.155).

另一個是精胺酸血管加壓素 (arginine vasopressin, 簡稱 AVP), 此激素濃度高時, 人們更謹慎; 田鼠轉化為一夫一妻制 (p.156). 當抑制這個激素, 田鼠就改為到處拈花惹草. 再來是大麻或麥角酸二乙酰胺(Lysergic Acid Diethylamide-25, 簡稱 LSD), 它的效果使人感受到和世界產生連結 (??). 前者的效用是刺激多巴胺分泌等等, 所以對其他團體的敵意或戒心降低. 這兩個都是毒品. 對人類來說, 不管毒物會不會成癮? 太過放心顯然和我們這個物種進化的方向相牴觸. 也很不幸, 人類就是會這樣吵來吵去~~~

2023 Q3 投資回顧

隨著員工分紅數字出爐, 今年的上班收入大致底定, 算是 show hands 了. 投資的部份呢, 概略可以抓出 Q3 投資稅後收入是上班稅前收入 1.44 倍. 看起來有點均值回歸的味道, 跟 2019, 2020 年的 1.48、1.47 倍差不多, 雖然輸給 2021 年的 1.65 倍, 但是比去年 0.23 倍好多了!!

在這一季當中, 我把近幾年獲利甚豐的 XLE 賣光了. 換成大約等值的 PFF. 雖然 XLE 和 QQQ 有蹺蹺板的作用, 是個不錯的資產配置方式. 不過 XLE 配息少又要扣 30% 稅. 而且上漲空間也有限。20 多年來的天花板就是 100 美元 (如下圖). 感覺不是個我該長抱的標的. 至於 PFF, 到目前為止表現不佳, 還在觀察當中. 較正面的改變就是每個月都可以領上萬塊配息, 讓我覺得更有安全感. 負面的改變就是帳面還虧損, 9月底虧2~3%, 這幾天慢慢跌到6% ~~~

XLE ETF 歷年股價

今年 Iphone 15 發表後, 看起來不夠吸引人. 老巴的波克夏節節下滑, 科技股表現都不太好. 加上聯準會的微言大義動見觀瞻. 升息暗示就能使得我的投資收入在 9/15 創新高之後開始盤跌. 所幸美元半個月上漲 3%, 抵銷了一部分跌幅. 好漢不提上月勇, 現在要考慮的是 Q4 要不要做事情? 甚至要做什麼事?

既然美元對台幣的匯率如此之高 (雖然還可以更高, 如下圖), 現在用台幣換美元會有點手軟. 假設美元繼續再漲, 那麼就算存美元 6 個月定存都會賺. 若是不猜匯率, 我想只能準備低接美股, 接不到就算了.

美元對台幣歷史匯率

除了美股,反向投入日股或是台股也可以. 畢竟日幣跌到這麼低了, 就算是日本車賣不動才導致匯率差也可以接受。Monica (微軟那個AI)說 2021 年日本汽車出口佔比 8.3 %, 日本車賣不好雖然影響匯率,但是日本體質應該還是不錯。

台股方面,我注意到最近高股息ETF很紅。不過一朝被蛇咬,十年怕井繩。如果台股沒有低到十年線以下,光是靠配息填權,績效遠不及美股。即使是像華倫存股/周文偉這樣的選股達人,精挑細選的資產組合才做到七千多萬,如果早早無腦 all in QQQ, 現在資產早就就上億了,so…

2023/Q3 投資分佈

最後期許年終結算的時候,業外收入/上班收入比能創新高。Q3 到今天 10/8 為止,這個比例曾低到 1.3 倍,幸好昨晚 QQQ 漲不少,又和目標近了些。總之,手上的子彈不能亂射。其他就看大環境了。

LLAMA 2 開測小筆記

話說上次設定完 dual boot 之後, 有個未完成的工作一直放在心上, 那就是跑 llama 2. 在 Windows 的環境下, 即使開了 Anaconda, 簡單跑個指令, 也會丟出 TCPScore 括號沒對齊的 runtime error. 而每隻 Python 單獨跑似乎沒事, 表示都有對齊.

我去 stackoverflow 找了一下, 發現都沒有人討論這件事. 所以我推論一定是這問題太蠢不值得討論. 那麼應該就是 Windows 不支援用 ‘\’ 分行的關係. 與其一支一支程式找出罪魁禍首們, 還是直接來跑跑 Ubuntu 吧!

果然! 在 Ubuntu 環境下, 同樣執行下面這行指令, 無論要不要分行, 都不會發生 Windows 看到的錯誤. 下面這行可以順利執行.

torchrun –nproc_per_node 1 example_text_completion.py –ckpt_dir llama-2-7b/ –tokenizer_path tokenizer.model –max_seq_len 128 –max_batch_size 4

在 Ubuntu 22.04.3 LTS 版本的執行過程中, 我一共只遇到三個錯, 依序是:

File “/media/cash/Seagate Expansion Drive/AI/example_text_completion.py", line 4, in
import fire
ModuleNotFoundError: No module named ‘fire’

File “/media/cash/Seagate Expansion Drive/AI/llama/generation.py", line 13, in
from fairscale.nn.model_parallel.initialize import (
ModuleNotFoundError: No module named ‘fairscale’

File “/media/cash/Seagate Expansion Drive/AI/llama/tokenizer.py", line 8, in
from sentencepiece import SentencePieceProcessor
ModuleNotFoundError: No module named ‘sentencepiece’

問題回報這麼清楚白話, 我只需要

pip install fire

pip install fairscale

pip install sentencepiece

就可以正常執行了!

至於期待許久的對話功能, 依樣畫葫蘆看來不行, README.MD 有說把 max_seq_len 改 512, 這樣竟然就可以.

torchrun –nproc_per_node 1 example_chat_completion.py –ckpt_dir llama-2-7b-chat/ –tokenizer_path tokenizer.model –max_seq_len 512 –max_batch_size 4

對了, 雖然這個只是 7b 的最小模型, load 個參數也是滿久的! 需要 5~6 分鐘 (338.91 秒). 不過改了 max_seq_len 到 512, loading time 就變成 149.72 秒. 好神奇. 這個 model 跑出來也是沒有 UI, 只是多了 emoji 的回答. 看來弄成對話要自己處理.

當然我更期待跑 70b 參數的那個模型. 它能在我 24GB DDR5 的顯卡上跑得動嗎? 如果跑不動, 要再買個女用二手顯卡嗎? 嗯…夜深了, 美股開盤了, 來看看今天貼紙的價錢好不好? 诶!? 不錯耶, 趕快去睡覺夢美一點.

專利申請小心得

今年七到九月一共獲得四篇美國專利,這個紀錄近期不太容易打破,所以記錄一下。2022/9/30 之後, USPTO 傳統的搜尋介面也改了, 要到這個網站 [1] 下指令,新介面我不太會用。總之,先抓圖壓壓驚。

最近也在為一個新的專利申請書做修改,所以把申請的心得整理一下。

  1. 台灣的專利申請有 10 個請求項的限制,基本申請費就要 7,000元(10項),請求超過 10 項後每項加 800 元。超過 50 頁後每 50 頁再收 500 元。所以專利事務所有時會註記某些項目只在美國申請,台灣不申請。
  2. 專利事務所的收費通常以案計酬,所以有時他們會建議一個申請案按主打項目拆成兩案。這樣事務所花 1 份多的力氣就可以賺兩倍左右的錢。此時可能分案給兩個不同的審查員,他們口味可能不同,對我們來說也多一次挑戰的機會。當然,公司要用財力支持。
  3. 獲得專利後不用馬上繳錢,此時的法律狀態在 “領證中"。等到一定期限內 (台灣是 3 個月) 把第一年專利費給繳了,這個專利才正式公告。雖然這個動作不能偷偷延長專利有效期限,但是可以省利息。( 專利權的開始為公告日那天給予專利權;專利權的到期日是申請日起算20年(發明)屆滿。新型專利10年,設計專利15年。) [3]
  4. 專利申請可能被核駁 (駁回)。駁回後可以申訴,也就是要求再審查。再被核駁可以申請行政救濟。

基本上,專利事務所的人頭腦都滿不錯的。因為他們必須很快摸熟申請人的專業,我們若申請系統專利的案件,就要細心問出整套邏輯。如果申請元件專利,那專利工程師還得懂電子、電磁、電路。另外還要有人懂美工。像我連 word 的標頭對齊都搞不太定,畫圖的框框也忽大忽小。這樣連申請推甄都會扣分,還好當年是考聯考。

對於發明人來說 (申請人是公司),建議就是想到一個 idea 就寫下來。然後儘快想個七成把握就先去公司註冊登記。通常我都是申請書寫好,老闆簽過之後,才會想到漏想這個、漏寫那個,然後半夜睡不著….怎麼沒想到可以用在哪裡!!! 然後事務所的人來訪談後,就會發現我跟申請書上講得有點不一樣, 感覺奧客錢難賺…

[REF]

  1. https://ppubs.uspto.gov/pubwebapp/
  2. https://topic.tipo.gov.tw/patents-tw/cp-783-872448-29025-101.html
  3. https://topic.tipo.gov.tw/patents-tw/lp-783-101.html
  4. https://www.tipo.gov.tw/tw/cp-56-802499-1c58f-1.html