国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

深度學(xué)習(xí)之權(quán)重初始化

這篇具有很好參考價(jià)值的文章主要介紹了深度學(xué)習(xí)之權(quán)重初始化。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

在深度學(xué)習(xí)中,神經(jīng)網(wǎng)絡(luò)的權(quán)重初始化方法( w e i g h t weight weight i n i t i a l i z a t i o n initialization initialization)對(duì)模型的收斂速度和性能有著至關(guān)重要的影響。說(shuō)白了,神經(jīng)網(wǎng)絡(luò)其實(shí)就是對(duì)權(quán)重參數(shù) w w w的不停迭代更新,以達(dá)到更好的性能。因此,對(duì)權(quán)重 w w w的初始化則顯得至關(guān)重要,一個(gè)好的權(quán)重初始化雖然不能完全解決梯度消失和梯度爆炸的問(wèn)題,但是對(duì)于處理這兩個(gè)問(wèn)題是有很大的幫助的,并且十分有利于模型性能和收斂速度。

本文將介紹以下五種常見(jiàn)的權(quán)重初始化的方法:

權(quán)重初始化為 0 0 0
權(quán)重隨機(jī)初始化
X a v i e r Xavier Xavier i n i t i a l i z a t i o n initialization initialization
H e He He i n i t i a l i z a t i o n initialization initialization
預(yù)訓(xùn)練權(quán)重
權(quán)重初始化為 0 0 0

如果將權(quán)重初始化全部為 0 0 0的話(huà),這樣的操作等同于等價(jià)于一個(gè)線性模型,將所有權(quán)重設(shè)為 0 0 0時(shí),對(duì)于每一個(gè) w w w而言,損失函數(shù)的導(dǎo)數(shù)都是相同的,因此在隨后的迭代過(guò)程中所有權(quán)重都具有相同的值,這會(huì)使得隱藏單元變得對(duì)稱(chēng),并繼續(xù)運(yùn)行設(shè)置的 n n n次的迭代,會(huì)導(dǎo)致網(wǎng)絡(luò)中同一個(gè)神經(jīng)元的不同權(quán)重都是一樣的。下面代碼為權(quán)重初始化為 0 0 0的代碼:

def initialize_parameters_zeros(layers_dims):
    """
    Arguments:
    layer_dims -- python array (list) containing the size of each layer.
    Returns:
    parameters -- python dictionary containing your parameters "W1", "b1", ..., "WL", "bL":
                    W1 -- weight matrix of shape (layers_dims[1], layers_dims[0])
                    b1 -- bias vector of shape (layers_dims[1], 1)
                    ...
                    WL -- weight matrix of shape (layers_dims[L], layers_dims[L-1])
                    bL -- bias vector of shape (layers_dims[L], 1)
    """
    parameters = {}
    np.random.seed(3)
    L = len(layers_dims)  # number of layers in the network
    for l in range(1, L):
        parameters['W' + str(l)] = np.zeros((layers_dims[l], layers_dims[l - 1]))
        parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))
    return parameters

讓我們來(lái)看看權(quán)重初始化為 0 0 0之后其 c o s t cost cost f u n c t i o n function function是如何變化的,從圖中可以看出,當(dāng)代價(jià)函數(shù)降到 0.64 0.64 0.64(迭代 1000 1000 1000次)后,梯度逐漸消失,再訓(xùn)練迭代已經(jīng)不起什么作用了。
深度學(xué)習(xí)之權(quán)重初始化,深度學(xué)習(xí)基礎(chǔ),深度學(xué)習(xí),人工智能
權(quán)重隨機(jī)初始化

權(quán)重隨機(jī)初始化是比較常見(jiàn)的做法,即 W W W隨機(jī)初始化。隨機(jī)初始化的代碼如下:

def initialize_parameters_random(layers_dims):
    """
    Arguments:
    layer_dims -- python array (list) containing the size of each layer.
    Returns:
    parameters -- python dictionary containing your parameters "W1", "b1", ..., "WL", "bL":
                    W1 -- weight matrix of shape (layers_dims[1], layers_dims[0])
                    b1 -- bias vector of shape (layers_dims[1], 1)
                    ...
                    WL -- weight matrix of shape (layers_dims[L], layers_dims[L-1])
                    bL -- bias vector of shape (layers_dims[L], 1)
    """
    np.random.seed(3)  # This seed makes sure your "random" numbers will be the as ours
    parameters = {}
    L = len(layers_dims)  # integer representing the number of layers
    for l in range(1, L):
        parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1])*0.01
        parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))
    return parameters

上述代碼中權(quán)重乘 0.01 0.01 0.01是因?yàn)橐?span id="n5n3t3z" class="katex--inline"> W W W隨機(jī)初始化到一個(gè)相對(duì)較小的值,因?yàn)槿绻?span id="n5n3t3z" class="katex--inline"> X X X很大的話(huà), W W W又相對(duì)較大,會(huì)導(dǎo)致 Z Z Z非常大,這樣如果激活函數(shù)是 s i g m o i d sigmoid sigmoid,就會(huì)導(dǎo)致 s i g m o i d sigmoid sigmoid的輸出值 1 1 1或者 0 0 0,然后會(huì)導(dǎo)致一系列問(wèn)題(比如 c o s t cost cost f u n c t i o n function function計(jì)算的時(shí)候, l o g log log里是 0 0 0,這樣會(huì)有點(diǎn)麻煩)。隨機(jī)初始化后, c o s t cost cost f u n c t i o n function function隨著迭代次數(shù)的變化示意圖如下圖 2 2 2所示為
深度學(xué)習(xí)之權(quán)重初始化,深度學(xué)習(xí)基礎(chǔ),深度學(xué)習(xí),人工智能
能夠看出, c o s t cost cost f u n c t i o n function function的變化是比較正常的。但是隨機(jī)初始化也有缺點(diǎn), n p . r a n d o m . r a n d n ( ) np.random.randn() np.random.randn()其實(shí)是一個(gè)均值為 0 0 0,方差為 1 1 1的高斯分布中采樣。當(dāng)神經(jīng)網(wǎng)絡(luò)的層數(shù)增多時(shí),會(huì)發(fā)現(xiàn)越往后面的層的激活函數(shù)(使用 t a n H tanH tanH)的輸出值幾乎都接近于 0 0 0,極易出現(xiàn)梯度消失。如下圖 3 3 3所示:

深度學(xué)習(xí)之權(quán)重初始化,深度學(xué)習(xí)基礎(chǔ),深度學(xué)習(xí),人工智能

X a v i e r Xavier Xavier i n i t i a l i z a t i o n initialization initialization

在使用以上兩種方法來(lái)初始化權(quán)重極易出現(xiàn)梯度消失的問(wèn)題,而 X a v i e r Xavier Xavier i n i t i a l i z a t i o n initialization initialization出現(xiàn)就解決了上面問(wèn)題。其思想倒就是盡可能的讓輸入和輸出服從相同的分布,這樣就能夠避免后面層的激活函數(shù)的輸出值趨向于 0 0 0。本文主要介紹 P y t o r c h Pytorch Pytorch當(dāng)中 X a v i e r Xavier Xavier均勻分布和 X a v i e r Xavier Xavier正態(tài)分布初始化這兩種方式。

我們來(lái)簡(jiǎn)單推導(dǎo)一下 X a v i e r Xavier Xavier初始化的原理:首先我們定義一層的卷積運(yùn)算為如下公式,其中 n i {n_i} ni?表示輸入的個(gè)數(shù)。

y = w 1 x 1 + ? ? ? + w n i x n i + b y = w_1x_1 + ··· + w_{ni}x_{ni}+ b y=w1?x1?+???+wni?xni?+b

根據(jù)我們學(xué)過(guò)的概率論統(tǒng)計(jì)知識(shí)可以得到如下的方差公式:

V a r ( w i x i ) = E [ w i ] 2 V a r ( x i ) + E [ x i ] 2 V a r ( w i ) + V a r ( w i ) V a r ( x i ) Var(w_ix_i)=E[w_i]^2Var(x_i) + E[x_i]^2Var(w_i) + Var(w_i)Var(x_i) Var(wi?xi?)=E[wi?]2Var(xi?)+E[xi?]2Var(wi?)+Var(wi?)Var(xi?)

當(dāng)我們假設(shè)輸入和輸入的權(quán)重的均值都是 0 0 0(使用BN層以后很容易就可以滿(mǎn)足)時(shí),上式可以簡(jiǎn)化為:

V a r ( w i x i ) = V a r ( w i ) V a r ( x i ) Var(w_ix_i)=Var(w_i)Var(x_i) Var(wi?xi?)=Var(wi?)Var(xi?)

進(jìn)一步我們假設(shè)輸入 x x x和權(quán)重 w w w都是獨(dú)立同分布,則可以得到:

V a r ( y ) = n i V a r ( w i ) V a r ( x i ) Var(y) = n_iVar(w_i)Var(x_i) Var(y)=ni?Var(wi?)Var(xi?)

于是按照 X a v i e r Xavier Xavier的要求保證輸入和輸出的方差要一致,則可以得到:

V a r ( w i ) = 1 n i Var(w_i) = \frac{1}{n_i} Var(wi?)=ni?1?

對(duì)于一個(gè)多層的網(wǎng)絡(luò),某一層的方差可以用累積的形式表達(dá):

V a r [ z i ] = V a r [ x ] ∏ i = 0 i ? 1 n i V a r [ W i ‘ ] Var[z^i] = Var[x]\prod_{i^{}=0}^{i-1}n_i^Var[W^{i^`}] Var[zi]=Var[x]i=0i?1?niV?ar[Wi]

對(duì)于誤差反向傳播也有類(lèi)似的表達(dá)形式,如下所示,其中 n i + 1 n_{i+1} ni+1?表示輸出個(gè)數(shù)

V a r [ ? C o s t ? s i ] = V a r [ ? C o s t ? s d ] ∏ i = i d n i + 1 V a r [ W i ‘ ] Var[\frac{\partial Cost}{\partial s^i}] = Var[\frac{\partial Cost}{\partial s^d}]\prod_{i^{}=i}^n5n3t3zn_{i^+1}Var[W^{i^`}] Var[?si?Cost?]=Var[?sd?Cost?]i=id?ni+1?Var[Wi]

綜上,為了保證前向傳播和反向傳播時(shí)每一層的方差一致,應(yīng)滿(mǎn)足:

? i , n i V a r [ W i ] = 1 \forall_i ,n_iVar[W^i]=1 ?i?ni?Var[Wi]=1

? i , n i + 1 V a r [ W i ] = 1 \forall_i ,n_{i+1}Var[W^i]=1 ?i?ni+1?Var[Wi]=1

但是,實(shí)際當(dāng)中輸入與輸出的個(gè)數(shù)往往不相等,于是為了均衡考量輸出和輸入,最終我們的權(quán)重的方差應(yīng)滿(mǎn)足如下要求:

? i , V a r [ W i ] = 2 n i + n i + 1 \forall_i ,Var[W^i]= \frac{2}{n_i + n_{i+1}} ?i?,Var[Wi]=ni?+ni+1?2?

1、 X a v i e r Xavier Xavier均勻分布初始化

對(duì)于均勻分布來(lái)說(shuō),我們都知道區(qū)間 [ a , b ] [a,b] [a,b]的方差為:

V a r = ( b ? a ) 2 12 Var=\frac{(b-a)^2}{12} Var=12(b?a)2?

那么就需要將均勻分布的方差等于我們?cè)谏厦嫱茖?dǎo)出來(lái)的 X a v i e r Xavier Xavier的權(quán)重方差,即:

( b ? a ) 2 12 = 2 n i + n i + 1 \frac{(b-a)^2}{12} = \frac{2}{n_i + n_{i+1}} 12(b?a)2?=ni?+ni+1?2?

經(jīng)過(guò)化解后 ( a + b = 0 ) (a+b=0) (a+b=0)可以得到 X a v i e r Xavier Xavier均勻初始化后權(quán)重的取值范圍為:

W ? U [ ? 6 n i + n i + 1 , 6 n i + n i + 1 ] W - U[-\frac{\sqrt{6}}{\sqrt{n_i+n_{i+1}}}, \frac{\sqrt{6}}{\sqrt{n_i+n_{i+1}}}] W?U[?ni?+ni+1? ?6 ??,ni?+ni+1? ?6 ??]

原理我們講完了,現(xiàn)在來(lái)看一下在 P y t o r c h Pytorch Pytorch中是如何調(diào)用 X a v i e r Xavier Xavier均勻分布初始化的:

# tensor表示要初始化的張量,gain表示縮放因子
torch.nn.init.xavier_uniform(tensor, gain=1)

# 舉例說(shuō)明:
w = torch.Tensor(3, 5)
nn.init.xavier_uniform(w, gain=math.sqrt(2))

2、 X a v i e r Xavier Xavier正態(tài)分布初始化

我們都知道均值為 0 0 0,標(biāo)準(zhǔn)差為 σ \sigma σ的正態(tài)分布方差為

V a r = σ 2 Var=\sigma^2 Var=σ2

同樣的,需要將正態(tài)分布的方差等于我們?cè)谏厦嫱茖?dǎo)出來(lái)的 X a v i e r Xavier Xavier的權(quán)重方差,即:

σ 2 = 2 n i + n i + 1 \sigma^2 = \frac{2}{n_i + n_{i+1}} σ2=ni?+ni+1?2?

經(jīng)過(guò)化解后可以得到 X a v i e r Xavier Xavier正態(tài)分布初始化后權(quán)重的標(biāo)準(zhǔn)差為:

σ = 2 n i + n i + 1 \sigma = \sqrt{\frac{2}{n_i + n_{i+1}}} σ=ni?+ni+1?2? ?

那么我們?cè)賮?lái)看一下在 P y t o r c h Pytorch Pytorch中是如何調(diào)用 X a v i e r Xavier Xavier正態(tài)分布初始化的:

# tensor表示要初始化的張量,gain表示縮放因子
torch.nn.init.xavier_normal(tensor, gain=1)

# 舉例說(shuō)明:
w = torch.Tensor(3, 5)
nn.init.xavier_normal(w)

3、 X a v i e r Xavier Xavier權(quán)重初始化表現(xiàn)效果

如下圖 4 4 4所示為采用 X a v i e r Xavier Xavier i n i t i a l i z a t i o n initialization initialization后每層的激活函數(shù)輸出值的分布,從圖中我們可以看出,深層的激活函數(shù)輸出值還是非常服從標(biāo)準(zhǔn)高斯分布。
深度學(xué)習(xí)之權(quán)重初始化,深度學(xué)習(xí)基礎(chǔ),深度學(xué)習(xí),人工智能
雖然 X a v i e r Xavier Xavier i n i t i a l i z a t i o n initialization initialization能夠很好的適用于 t a n H tanH tanH 激活函數(shù),但對(duì)于目前神經(jīng)網(wǎng)絡(luò)中最常用的 R e L U ReLU ReLU激活函數(shù),還是無(wú)能能力,如下圖 5 5 5所示為采用 R e L U ReLU ReLU激活函數(shù)后, X a v i e r Xavier Xavier i n i t i a l i z a t i o n initialization initialization初始化的每層激活函數(shù)輸出值的分布,從圖中可以看出當(dāng)達(dá)到 5 5 5 6 6 6層后幾乎又開(kāi)始趨向于 0 0 0,更深層的話(huà)很明顯又會(huì)趨向于 0 0 0
深度學(xué)習(xí)之權(quán)重初始化,深度學(xué)習(xí)基礎(chǔ),深度學(xué)習(xí),人工智能
由此可見(jiàn), X a v i e r Xavier Xavier權(quán)重初始化方式比較適用于 t a n H tanH tanH S i g m o i d Sigmoid Sigmoid激活函數(shù),而對(duì)于 R e L U ReLU ReLU這種非對(duì)稱(chēng)性的激活函數(shù)還是容易出現(xiàn)梯度消失的現(xiàn)象。

H e He He i n i t i a l i z a t i o n initialization initialization

H e He He i n i t i a l i z a t i o n initialization initialization是由何凱明大神提出的一種針對(duì) R e L U ReLU ReLU激活函數(shù)的初始化方法。 H e He He i n i t i a l i z a t i o n initialization initialization的思想是:和 X a v i e r Xavier Xavier初始化方式一樣,都希望初始化使得正向傳播時(shí),狀態(tài)值的方差保持不變,反向傳播時(shí),關(guān)于激活值的梯度的方差保持不變。由于小于 0 0 0的值經(jīng)過(guò) R e L U ReLU ReLU激活函數(shù)都會(huì)變成 0 0 0,而大于 0 0 0的值則保持原值。因此在 R e L U ReLU ReLU網(wǎng)絡(luò)中,假定每一層有一半的神經(jīng)元被激活,另一半為 0 0 0,所以,要保持 v a r i a n c e variance variance不變,只需要在 X a v i e r Xavier Xavier的基礎(chǔ)上再除以2即可。本文主要介紹 P y t o r c h Pytorch Pytorch當(dāng)中 H e He He i n i t i a l i z a t i o n initialization initialization均勻分布和 H e He He i n i t i a l i z a t i o n initialization initialization正態(tài)分布初始化這兩種方式。

對(duì)于 H e He He i n i t i a l i z a t i o n initialization initialization的推導(dǎo)來(lái)說(shuō)前面和 X a v i e r Xavier Xavier i n i t i a l i z a t i o n initialization initialization是相似的,但在方差推到過(guò)程中,需要將式子左側(cè)除以 2 2 2,如下所示:

V a r ( y ) = 1 2 n i V a r ( w i ) V a r ( x i ) Var(y) = \frac{1}{2}n_iVar(w_i)Var(x_i) Var(y)=21?ni?Var(wi?)Var(xi?)

為了保證輸出和輸入的方差一直,則可以得到權(quán)重的方差為:

V a r ( w i ) = 2 n i Var(w_i) = \frac{2}{n_i} Var(wi?)=ni?2?

對(duì)于 B a c k w a r d Backward Backward來(lái)說(shuō)和 F o r w a r d Forward Forward思路是相似的,只不過(guò)需要考慮到鏈?zhǔn)角髮?dǎo)法則,這里不予以推導(dǎo),只給出最終的結(jié)果為:

V a r ( w i + 1 ) = 2 n i + 1 Var(w_{i+1}) = \frac{2}{n_{i+1}} Var(wi+1?)=ni+1?2?

1、 H e He He i n i t i a l i z a t i o n initialization initialization均勻分布初始化

X a v i e r Xavier Xavier均勻分布初始化操作一樣我們得到 H e He He i n i t i a l i z a t i o n initialization initialization的取值范圍為:

W ? U [ ? 6 n i + ( a 2 + 1 ) , 6 n i + ( a 2 + 1 ) ] W - U[-\frac{\sqrt{6}}{\sqrt{n_i+(a^2+1)}}, \frac{\sqrt{6}}{\sqrt{n_i+(a^2+1)}}] W?U[?ni?+(a2+1) ?6 ??,ni?+(a2+1) ?6 ??]

P y t o r c h Pytorch Pytorch H e He He i n i t i a l i z a t i o n initialization initialization也叫做 k a i m i n g kaiming kaiming,調(diào)用代碼如下:

# tensor表示要初始化的張量
# a表示這層之后使用的rectifier的斜率系數(shù)(ReLU的默認(rèn)值為0
# mode可以為“fan_in”(默認(rèn))或“fan_out”。
# “fan_in”保留前向傳播時(shí)權(quán)值方差的量級(jí),“fan_out”保留反向傳播時(shí)的量級(jí)。
torch.nn.init.kaiming_uniform(tensor, a=0, mode='fan_in')

# 舉例說(shuō)明:
w = torch.Tensor(3, 5)
nn.init.kaiming_uniform(w, mode='fan_in')

2、 H e He He i n i t i a l i z a t i o n initialization initialization正態(tài)分布初始化

X a v i e r Xavier Xavier正態(tài)分布初始化操作一樣我們得到 H e He He i n i t i a l i z a t i o n initialization initialization的標(biāo)準(zhǔn)差為:

σ = 2 n i + ( a 2 + 1 ) \sigma = \sqrt{\frac{2}{n_i + (a^2+1)}} σ=ni?+(a2+1)2? ?

P y t o r c h Pytorch Pytorch X a v i e r Xavier Xavier正態(tài)分布初始化的調(diào)用代碼如下:

# tensor表示要初始化的張量
# a表示這層之后使用的rectifier的斜率系數(shù)(ReLU的默認(rèn)值為0
# mode可以為“fan_in”(默認(rèn))或“fan_out”。
# “fan_in”保留前向傳播時(shí)權(quán)值方差的量級(jí),“fan_out”保留反向傳播時(shí)的量級(jí)。
torch.nn.init.kaiming_normal(tensor, a=0, mode='fan_in')

# 舉例說(shuō)明:
w = torch.Tensor(3, 5)
nn.init.kaiming_normal(w, mode='fan_out')

3、 H e He He i n i t i a l i z a t i o n initialization initialization權(quán)重初始化表現(xiàn)效果

如下圖 6 6 6所示為采用 H e He He i n i t i a l i z a t i o n initialization initialization方式初始化權(quán)重后,隱藏層使用 R e L U ReLU ReLU時(shí),激活函數(shù)的輸出值的分布情況,從圖中可知,針對(duì) R e L U ReLU ReLU激活函數(shù), H e He He i n i t i a l i z a t i o n initialization initialization效果是比 X a v i e r Xavier Xavier i n i t i a l i z a t i o n initialization initialization好很多。
深度學(xué)習(xí)之權(quán)重初始化,深度學(xué)習(xí)基礎(chǔ),深度學(xué)習(xí),人工智能
由此可見(jiàn), H e He He i n i t i a l i z a t i o n initialization initialization權(quán)重初始化方式是非常適用于 R e L U ReLU ReLU激活函數(shù)。

預(yù)訓(xùn)練模型

目前更多的使用已經(jīng)針對(duì)相似任務(wù)已經(jīng)訓(xùn)練好的模型,稱(chēng)之為預(yù)訓(xùn)練模型。在訓(xùn)練開(kāi)始時(shí)就已經(jīng)有了非常好的初始化參數(shù),只需要將最后的全連接層進(jìn)行凍結(jié),訓(xùn)練其他部分即可。

總結(jié)

1、權(quán)重采用初始化為 0 0 0和隨機(jī)初始化都比較容易出現(xiàn)梯度消失的問(wèn)題,因此不常用。

2、 X a v i e r Xavier Xavier權(quán)重初始化方式主要針對(duì)于 t a n H tanH tanH s i g m o i d sigmoid sigmoid激活函數(shù)。

3、 H e He He i n i t i a l i z a t i o n initialization initialization權(quán)重初始化方式主要針對(duì)于 R e L U ReLU ReLU激活函數(shù)。

4、如果有相似任務(wù)已經(jīng)訓(xùn)練好的模型,也可以考慮采用預(yù)訓(xùn)練模型來(lái)作權(quán)重初始化。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-572657.html

到了這里,關(guān)于深度學(xué)習(xí)之權(quán)重初始化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包