最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

RWKV LM 語(yǔ)言模型 ffn層 淺談 可視化

2023-04-01 17:06 作者:帥氣多汁の程序猿  | 我要投稿


# 7B 模型ffn層可視化


![請(qǐng)?zhí)砑訄D片描述](https://img-blog.csdnimg.cn/aa4eb63d3ce640079f882f6f7640d8c1.gif)?


[詳細(xì)介紹 RWKV 語(yǔ)言模型:具有 Transformer 優(yōu)點(diǎn)的 CNN](https://blog.csdn.net/weixin_49139876/article/details/129869814?csdn_share_tail=%7B%22type%22:%22blog%22,%22rType%22:%22article%22,%22rId%22:%22129869814%22,%22source%22:%22weixin_49139876%22%7D)

# 前言

首先 為了對(duì)新手友好 簡(jiǎn)單講一下什么是 RWKV LM, 這是一個(gè)開(kāi)源LLM語(yǔ)言模型項(xiàng)目 .其性能與生態(tài)支持很好 例如:cuda重寫(xiě)了python代碼 效率更高,有web 項(xiàng)目匹配,有chatrwkv,也可以運(yùn)行在移動(dòng)設(shè)備上 良好的跨平臺(tái)能力,以及節(jié)省資源的特點(diǎn) .?

是目前唯一一個(gè)使用CNN也能達(dá)到同等transformer 類模型性能的 模型?


## 最近研發(fā)群里面看到大家在討論 腦電圖

大伙中有人想看RWKV fnn層響應(yīng)可視化, 然后作者就發(fā)了一個(gè)效果圖

![在這里插入圖片描述](https://img-blog.csdnimg.cn/b600bc21be514c65811e0319522aa3e2.gif)

顯而易見(jiàn)的 看到 明顯的異常值 大很多, 有人管這個(gè)叫做腦電圖, 其實(shí)差不多 只不過(guò)不是特殊些的連續(xù)信號(hào).? 相信大老們肯定對(duì)此熟悉,但是對(duì)我來(lái)說(shuō)第一次見(jiàn)到,非常好奇. 這種異常值統(tǒng)稱outlier離群點(diǎn).? ?而后另外一個(gè)佬做了一下430M模型各層的可視化

![在這里插入圖片描述](https://img-blog.csdnimg.cn/f070531343cf443b84995ce00961e0b1.gif)

這個(gè)就更加離譜了, 離群點(diǎn)倍越往后就越大. 那么就好奇 如果這樣的outline對(duì)語(yǔ)言模型很重要,而模型還擁有涌現(xiàn)能力與頓悟, 那么他們之間有什么聯(lián)系?


1.首先我們閱讀一下源碼


```bash

?def forward(self, tokens, state=None, preprocess_only = False):

? ? ? ? # tokens=tokens.to('cpu').numpy().tolist()

? ? ? ? # if tokens is not None:

? ? ? ? #? ? ?print('input_tokens', len(tokens))

? ? ? ? # if state is not None:

? ? ? ? #? ? ?print('? input state',state.shape)

? ? ? ? with torch.no_grad():

? ? ? ? ? ? w = self.w

? ? ? ? ? ? args = self.args


? ? ? ? ? ? seq_mode = len(tokens) > 1


? ? ? ? ? ? x = w.emb.weight[tokens] if seq_mode else w.emb.weight[tokens[-1]]

? ? ? ? ? ? if self.RUN_DEVICE == 'cuda':

? ? ? ? ? ? ? ? x = x.cuda()


? ? ? ? ? ? if state == None:

? ? ? ? ? ? ? ? state = torch.zeros(args.n_layer * 5, args.n_embd, device=self.RUN_DEVICE)

? ? ? ? ? ? ? ? for i in range(args.n_layer):

? ? ? ? ? ? ? ? ? ? state[5*i+4] -= 1e30


? ? ? ? ? ? SA = self.SA_seq if seq_mode else self.SA_one

? ? ? ? ? ? FF = self.FF_seq if seq_mode else self.FF_one

? ? ? ? ? ? all_ffn_out=[]

? ? ? ? ? ? for i in range(args.n_layer):

? ? ? ? ? ? ? ? ww = w.blocks[i].att

? ? ? ? ? ? ? ? x = x + SA(self.LN(x, w.blocks[i].ln1), state, i,

? ? ? ? ? ? ? ? ? ? ww.time_mix_k, ww.time_mix_v, ww.time_mix_r, ww.time_first, ww.time_decay,

? ? ? ? ? ? ? ? ? ? ww.key.weight, ww.value.weight, ww.receptance.weight, ww.output.weight)


? ? ? ? ? ? ? ? ww = w.blocks[i].ffn

? ? ? ? ? ? ? ? ffn_out=FF(self.LN(x, w.blocks[i].ln2), state, i,

? ? ? ? ? ? ? ? ? ? ww.time_mix_k, ww.time_mix_r,

? ? ? ? ? ? ? ? ? ? ww.key.weight, ww.value.weight, ww.receptance.weight)

? ? ? ? ? ? ? ? x = x + ffn_out

? ? ? ? ? ? ? ? all_ffn_out.append(ffn_out)

? ? ? ? ? ? ? ? # print('ffn->',x)

? ? ? ? ? ? ? ? if (i+1) % RWKV_RESCALE_LAYER == 0:

? ? ? ? ? ? ? ? ? ? x = x / 2


? ? ? ? ? ? if preprocess_only:

? ? ? ? ? ? ? ? return state


? ? ? ? ? ? x = self.LN(x[-1,:], w.ln_out) if seq_mode else self.LN(x, w.ln_out)

? ? ? ? ? ? x = w.head.weight @ x

? ? ? ? ? ? # print('output',x.shape,'? out put state',state.shape)

? ? ? ? ? ? return x.float(),all_ffn_out, state

```

![在這里插入圖片描述](https://img-blog.csdnimg.cn/3c29bcf3c97a48c5a5f1b5973659b4bb.png)

![在這里插入圖片描述](https://img-blog.csdnimg.cn/4304a1a763274dfd99f30db062823593.png)

這里注意到ffn層 輸出后 會(huì)被layernorm 泛化,但即使這樣 也會(huì)有outlier 這就太奇怪了.

2.不同大小的模型可視化

為了探討不同模型大小對(duì)outlier的影響我做了后續(xù)的可視化


![1B5 fp32](https://img-blog.csdnimg.cn/f90f23b96ae941079f198c8f9cd77bb0.gif)

1b5 fp32

![請(qǐng)?zhí)砑訄D片描述](https://img-blog.csdnimg.cn/5528b49f2ac34e519f38394883965283.gif)

1b5 fp16

![請(qǐng)?zhí)砑訄D片描述](https://img-blog.csdnimg.cn/99993f0d34e34365888175b85195a51b.gif)

7b fp16

## 單從可視化結(jié)果中可以得到3個(gè)結(jié)論

?- 結(jié)論一: 模型越大 outlier 情況越少

?- 結(jié)論二 量化 或者說(shuō)精度的改變會(huì)影響 outlier

?- 結(jié)論三 outlier 的情況會(huì)直接影響模型的性能(并不嚴(yán)謹(jǐn))

如何得出

## 如何得出結(jié)論 以下為可視化時(shí)控制變量的情況?

?- 全部輸入都一致 為:` What is python? Please tell me in detail what it is, how to use it, how to learn it, and what advantages and disadvantages it has.`

?- 模型輸出不可控

?- 結(jié)論一; 對(duì)比7b fp16 與 1b5 fp16 的模型可視化可直觀看出 7b的outlier更小

?- 結(jié)論二,對(duì)比1b5 fp16 與 1b5 fp32 相同輸入的情況下,多次試驗(yàn)結(jié)果都表明fp32 的輸出比f(wàn)p16 的輸出更長(zhǎng) ,效果更好 猜測(cè)做量化的對(duì)齊 會(huì)保證性能的一致

?- 結(jié)論三? 對(duì)于1b5模型而言(7b fp32 3090單卡跑不了 后續(xù)會(huì)補(bǔ)上) 不同的精度會(huì)導(dǎo)致outlier 情況有區(qū)別,? 但是是否對(duì)模型性能有影響 要在后面的試驗(yàn)中來(lái)演示


## 進(jìn)行可量化的評(píng)估試驗(yàn)

? ?#### 思路

- 1.通過(guò)使用KL散度 來(lái)評(píng)估相同情況下 模型大小,精度,不同輸入 對(duì)outlier現(xiàn)象的影響

- 2.通過(guò)對(duì)outlier的操作(剔除,規(guī)范化等)來(lái)驗(yàn)證 不同層,大小 的outlier 的作用是什么

- 3.使用均方差來(lái) 評(píng)估不同模型大小,精度, ffn不同層 響應(yīng)的離散程度 (outlier 的嚴(yán)重情況)

- 4.對(duì)目前開(kāi)源的LLM模型進(jìn)行相同的操作 來(lái)驗(yàn)證outlier 到底在干什么

- 5.目前沒(méi)有太好的思路來(lái)驗(yàn)證 涌現(xiàn)與頓悟 跟outlier之間的關(guān)系,這應(yīng)該要在訓(xùn)練的過(guò)程中來(lái)統(tǒng)計(jì)outlier的情況 并根據(jù)其他多任務(wù)的評(píng)估指標(biāo)來(lái)評(píng)價(jià) outler 到達(dá)何種程度后 頓悟/涌現(xiàn) 就出現(xiàn)了.


RWKV LM 語(yǔ)言模型 ffn層 淺談 可視化的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
绥阳县| 舟曲县| 瑞丽市| 柳林县| 浠水县| 赤水市| 商都县| 河源市| 东方市| 陆川县| 衡南县| 钦州市| 东莞市| 历史| 舟曲县| 商都县| 杨浦区| 内江市| 湖南省| 平和县| 安图县| 永嘉县| 满洲里市| 津南区| 罗山县| 芜湖县| 正蓝旗| 商洛市| 潢川县| 通河县| 泾川县| 博爱县| 东丰县| 堆龙德庆县| 二手房| 长沙市| 宿州市| 昌宁县| 江源县| 刚察县| 上杭县|