那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

視覺模型weak-to-strong的實現

深度學習自然語言處理 ? 來源:深度學習自然語言處理 ? 2024-01-08 11:07 ? 次閱讀

深度學習自然語言處理 原創
作者:pp

幾天前,OpenAI「超級對齊」(Superalignment)團隊發布了成立以來的首篇論文,聲稱開辟了對超人類模型進行實證對齊的新研究方向。GPT-2能監督GPT-4,Ilya帶頭OpenAI超級對齊首篇論文來了:AI對齊AI取得實證結果

可能是為了讓大家更容易實現論文中的思路,也可能是為了讓自己的研究更加接地氣,不再被調侃為“CloseAI”。在公布這篇論文的同時,OpenAI也在GitHub開源了論文提出的"weak-to-strong"框架的代碼[1]

在觀察了倉庫中的代碼之后我們有了如下發現:

既有NLP版本也有CV版本

主代碼倉庫是一個對二元分類(binary classification)任務的“weak-to-strong”方法的實現。包含用于微調預訓練語言模型的代碼(訓練弱模型,生成若標簽),以及針對來自另一種語言模型的標簽進行訓練的代碼(使用弱標簽,訓練強學生)。

Vision目錄中則包含視覺模型"weak-to-strong"的實現(AlexNet -> DINO)。

a3897d4e-9e46-11ee-8b88-92fbcf53809c.png

支持論文中描述的各種損失函數,如置信度輔助損失函數,也可以自己定義損失函數,見weak_to_strong/loss.py。

#Customlossfunction
classxent_loss(LossFnBase):
def__call__(
self,logits:torch.Tensor,labels:torch.Tensor,step_frac:float
)->torch.Tensor:
"""
Thisfunctioncalculatesthecrossentropylossbetweenlogitsandlabels.

Parameters:
logits:Thepredictedvalues.
labels:Theactualvalues.
step_frac:Thefractionoftotaltrainingstepscompleted.

Returns:
Themeanofthecrossentropyloss.
"""
loss=torch.nn.functional.cross_entropy(logits,labels)
returnloss.mean()


classproduct_loss_fn(LossFnBase):
...
returnloss.mean()


classlogconf_loss_fn(LossFnBase):
...
returnloss.mean()

Qwen(千問)模型出現在代碼中

在主文件train_weak_to_strong.py中,OpenAI以自己的GPT2模型,和國產的Qwen(千問)模型為例

ModelConfig(
name="gpt2",
default_lr=5e-5,
eval_batch_size=32,
custom_kwargs={
"bf16":torch.cuda.is_bf16_supported(),
"fp32":nottorch.cuda.is_bf16_supported(),
},
),
ModelConfig(
name="gpt2-medium",
default_lr=5e-5,
eval_batch_size=32,
custom_kwargs={
"bf16":torch.cuda.is_bf16_supported(),
"fp32":nottorch.cuda.is_bf16_supported(),
},
),
...
ModelConfig(
name="Qwen/Qwen-7B",
default_lr=1e-5,
eval_batch_size=2,
gradient_checkpointing=True,
model_parallel=True,
#note:youwillprobablynotbeabletorunthiswithoutmanygpus
custom_kwargs={
"trust_remote_code":True,
"bf16":torch.cuda.is_bf16_supported(),
"fp32":nottorch.cuda.is_bf16_supported(),
},
),
ModelConfig(
name="Qwen/Qwen-14B",
default_lr=1e-5,
eval_batch_size=2,
gradient_checkpointing=True,
model_parallel=True,
#note:youwillprobablynotbeabletorunthiswithoutbf16supportandmanygpus
custom_kwargs={
"trust_remote_code":True,
"bf16":torch.cuda.is_bf16_supported(),
"fp32":nottorch.cuda.is_bf16_supported(),
},
),
...

兩階段訓練

Weak-to-strong關注的重點是:一個弱監督者如何監督一個比它聰明得多的模型?為此,OpenAI提出了一個兩階段的訓練方法:

對于一個給定的任務:

構建弱監督者。通過在一半訓練數據上微調較小的預訓練模型來構造弱監督者,他們把弱監督者的表現稱為弱表現,并通過弱模型的預測來生成弱標簽。(Stage 1)

#Traintheweakmodelonthefirsthalfofthetrainingdata
print(f"Trainingweakmodel,size{weak_model_size}")
weak_test_results,weak_ds=train_model(
weak_model_config,
train1_ds,
test_ds,
loss_type="xent",
label="weak",
subpath=os.path.join("weak_model_gt",weak_model_size.replace("/","_")),
lr=weak_lr,
eval_batch_size=weak_eval_batch_size,
inference_ds=train2_ds,
epochs=gt_epochs,
linear_probe=linear_probe,
optimizer_name=weak_optim,
)

訓練一個用于比較的性能上限的強模型。在另一半訓練數據上以Ground Truth作為標簽訓練一個較大的模型作為比較的上限。(Upper bound)

#Trainthestrongmodelonthesecondhalfofthetrainingdata
print(f"Trainingstrongmodel,size{strong_model_size}")
strong_test_results,_=train_model(
strong_model_config,
train2_ds,
test_ds,
loss_type="xent",
label="strong",
subpath=os.path.join("strong_model_gt",strong_model_size.replace("/","_")),
lr=strong_lr,
eval_batch_size=strong_eval_batch_size,
epochs=gt_epochs,
linear_probe=linear_probe,
optimizer_name=strong_optim,
)

通過第一步中的弱監督訓練強學生模型。本文使用生成的弱標簽微調強模型,并將該模型稱為強學生模型將其產生的性能稱為從弱到強(weak-to-strong)的性能。(Stage 2)

#Trainthestrongmodelonthesecondhalfofthetrainingdatawithlabelsgeneratedbytheweakmodel
all_transfer_test_results={}
fortlossintransfer_losses:
print(
f"Trainingtransfermodel,size{strong_model_size}onlabelsfrom{weak_model_size},withloss{tloss}"
)
transfer_test_results,_=train_model(
strong_model_config,
weak_ds,
test_ds,
loss_type=tloss,
label="weak2strong",
subpath=os.path.join(
"strong_model_transfer",
f"{weak_model_size.replace('/','_')}_{strong_model_size.replace('/','_')}_{tloss}",
),
lr=transfer_lr,
eval_batch_size=strong_eval_batch_size,
epochs=transfer_epochs,
linear_probe=linear_probe,
optimizer_name=transfer_optim,
)
all_transfer_test_results[tloss]=transfer_test_results
deltransfer_test_results

復刻版本,并非源碼

OpenAI在倉庫中提到,目前開源的代碼并非與論文實驗部分完全一致,不過是結果相近的。

"STATUS: This codebase is not well tested and does not use the exact same settings we used in the paper, but in our experience gives qualitatively similar results when using large model size gaps and multiple seeds. Expected results can be found for two datasets below. We may update the code significantly in the coming week."

這次開源的weak-to-strong實現代碼較為簡單,感興趣的朋友可以去嘗試一下,結合論文也許會有不一樣的感受。OpenAI正在大力研究超級對齊(Superalignment),不僅僅放出論文,開源代碼,同時也宣布了一項高達1000萬美金的資助計劃,我們將在之后的文章中為您帶來詳細解讀,敬請期待!

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 開源
    +關注

    關注

    3

    文章

    3408

    瀏覽量

    42714
  • 模型
    +關注

    關注

    1

    文章

    3313

    瀏覽量

    49231
  • OpenAI
    +關注

    關注

    9

    文章

    1140

    瀏覽量

    6707

原文標題:OpenAI開源"weak-to-strong"方法代碼框架!我們帶你一探究竟

文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何利用Transformers了解視覺語言模型

    模型稱為 “視覺語言” 模型是什么意思?一個結合了視覺和語言模態的模型?但這到底是什么意思呢?
    發表于 03-03 09:49 ?1077次閱讀
    如何利用Transformers了解<b class='flag-5'>視覺</b>語言<b class='flag-5'>模型</b>

    __attribute__((weak)) __weak_symbol在idf4.4庫中無效的原因?

    請教下,在編譯時,遇到幾個問題: 1.同一個工程中,在不同的C文件寫相同的函數,編譯時不報錯,函數生效隨機; 2.使用__attribute__((weak)) __weak_symbol無效。 請教下,__attribute__((w
    發表于 06-17 08:31

    在Fast-Strong情況下是否會出現過多的過沖

    ODT和CKE驅動程序的正確配置時遇到問題:SSTL18_II,有或沒有outerm = 25,50和SSTL18_I。他們都不滿意。根據配置的不同,在Fast-Strong情況下是否會出現過多的過沖
    發表于 06-11 14:54

    keil中__weak的功能和應用是什么

    __weak可以應用于函數的聲明和實現.若使用__weak修飾聲明 __weak void function(void);執行 function(); 語句時,當前文件中
    發表于 11-30 06:41

    HAL庫中__weak修飾符是什么?

    單片機系統時鐘是什么?HAL庫中__weak修飾符是什么?
    發表于 02-23 07:32

    __attribute__((weak)) __weak_symbol在idf4.4庫中無效,要怎么操作才能起作用呢?

    請教下,在編譯時,遇到幾個問題:1.同一個工程中,在不同的C文件寫相同的函數,編譯時不報錯,函數生效隨機;2.使用__attribute__((weak)) __weak_symbol無效。請教下,__attribute__((weak
    發表于 02-14 06:43

    目標跟蹤的視覺注意計算模型

    目標跟蹤的視覺注意計算模型:借鑒心理學中有關視覺注意的研究成果,提出一種應用于視頻圖像序列的注意焦點計算模型。針對Itti 模型算法計算復雜
    發表于 01-04 12:20 ?14次下載

    【MCU】Keil編譯無法識別__WEAK問題

    文章目錄1. Keil編譯無法識別__WEAK問題2. ARM系列編譯工具鏈:`__CC_ARM、__ICCARM__、__GNUC__、__TASKING__`__CC_ARM對應的平臺是:ARM
    發表于 11-05 16:05 ?52次下載
    【MCU】Keil編譯無法識別__<b class='flag-5'>WEAK</b>問題

    keil中__weak的功能和應用

    __weak可以應用于函數的聲明和實現.若使用__weak修飾聲明 __weak void function(void);執行 function(); 語句時,當前文件中
    發表于 11-21 15:51 ?6次下載
    keil中__<b class='flag-5'>weak</b>的功能和應用

    strong-password-generator密碼生成器

    strong-password-generator.zip
    發表于 05-07 10:40 ?0次下載
    <b class='flag-5'>strong</b>-password-generator密碼生成器

    輕量級視覺模型設計的新啟發

    風頭正盛的ViT,是計算機視覺領域過去十年最矚目的研究突破之一。2020年,谷歌視覺模型Vision Transformer(ViT)橫空出世,憑借碾壓各路ConvNet的性能表現,一舉掀起Transformer在計算機
    的頭像 發表于 07-28 09:33 ?1167次閱讀

    OpenCV中支持的非分類與檢測視覺模型

    前面給大家分別匯總了OpenCV中支持的圖像分類與對象檢測模型視覺視覺任務除了分類與檢測還有很多其他任務,這里我們就來OpenCV中支持的非分類與檢測的視覺
    的頭像 發表于 08-19 09:10 ?1379次閱讀

    基于可變形卷積的大規模視覺基礎模型

    擴大模型的規模是提高特征表示質量的重要策略,在計算機視覺領域,模型參數量的擴大不僅能夠有效加強深度模型的表征學習能力,而且能夠實現從海量數據
    的頭像 發表于 11-21 11:28 ?1085次閱讀

    梳理一下DPHY的集成驗證

    用于表示0的強度:highz0、supply0、strong0、pull0、weak0。
    的頭像 發表于 04-10 10:56 ?1810次閱讀

    Strong ARM比較器電路的工作原理

    “比較器是模數轉換器ADC中的核心電路之一。研究比較器失調等非理想因素的產生機制對提高ADC性能具有重要意義。鑒于此,本文以Strong ARM比較器為例,從工作原理和失調兩個方面對Strong ARM進行介紹。”
    的頭像 發表于 07-17 16:19 ?8826次閱讀
    <b class='flag-5'>Strong</b> ARM比較器電路的工作原理
    在线百家乐官网游戏软件| 称多县| 三晋棋牌中心| 大发888在线扑| 大发888古怪猴子| 天博国际| TT百家乐官网现金网| 足球百家乐官网投注计算| 玩百家乐官网的高手| 免费百家乐官网预测工具| 百家乐视频游戏账号| 真人百家乐是骗局| 百家乐庄闲排| 百家乐赌场视频| bbin赌场| 黄石市| 全景网百家乐官网的玩法技巧和规则| 百家乐推二八杠| 大发888游戏平台hg| 百家乐官网算号软件| 百家乐官网奥| 百家乐谁能看准牌| 百家乐出千原理| 广东百家乐主论坛| 六合彩报码室| 百家乐官网百战百胜| 百家乐官网倍投工具| 澳门百家乐赢钱技术| 威尼斯人娱乐城真假性| 网上赌博| 新梦想百家乐官网的玩法技巧和规则 | 威尼斯人娱乐老牌网站| 真人百家乐官网网西陆| 永利百家乐娱乐场| 旺苍县| 保单机百家乐破解方法| 555棋牌游戏| 百家乐官网庄闲比| 大发888娱乐官方| 百家乐官网导航网| 永利百家乐娱乐网|