<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          太強(qiáng)了!深度學(xué)習(xí)的Top10模型!

          共 25380字,需瀏覽 51分鐘

           ·

          2024-07-03 17:00

             
          本文約10000字,建議閱讀15分鐘

          本文分享了深度學(xué)習(xí)top10模型,它們?cè)趧?chuàng)新性、應(yīng)用價(jià)值和影響力方面都具有重要的地位。


          自2006年深度學(xué)習(xí)概念被提出以來(lái),20年快過(guò)去了,深度學(xué)習(xí)作為人工智能領(lǐng)域的一場(chǎng)革命,已經(jīng)催生了許多具有影響力的算法或模型。那么,你所認(rèn)為深度學(xué)習(xí)的最牛的模型有哪些呢?歡迎評(píng)論區(qū)留言討論~

          以下是我心目中的深度學(xué)習(xí)top10模型,它們?cè)趧?chuàng)新性、應(yīng)用價(jià)值和影響力方面都具有重要的地位。

          1、深度神經(jīng)網(wǎng)絡(luò)(DNN)

          背景:深度神經(jīng)網(wǎng)絡(luò)(DNN)也叫多層感知機(jī),是最普遍的深度學(xué)習(xí)算法,發(fā)明之初由于算力瓶頸而飽受質(zhì)疑,直到近些年算力、數(shù)據(jù)的爆發(fā)才迎來(lái)突破。

          模型原理:深度神經(jīng)網(wǎng)絡(luò)(DNN)是一種構(gòu)建于多層隱藏層之上的神經(jīng)網(wǎng)絡(luò)。每一
          層都扮演著信息的傳遞者和加工者的角色,通過(guò)非線性激活函數(shù)將輸入數(shù)據(jù)轉(zhuǎn)換為更具表現(xiàn)力的特征表示。正是這些連續(xù)的非線性變換,使得DNN能夠捕捉到輸入數(shù)據(jù)的深層次、復(fù)雜特征。

          模型訓(xùn)練:DNN的權(quán)重更新主要依賴于反向傳播算法和梯度下降優(yōu)化算法。在訓(xùn)練過(guò)程中,通過(guò)計(jì)算損失函數(shù)關(guān)于權(quán)重的梯度,再利用梯度下降或其他優(yōu)化策略,逐步調(diào)整權(quán)重值,以達(dá)到最小化損失函數(shù)的目的。

          優(yōu)點(diǎn):DNN憑借其強(qiáng)大的特征學(xué)習(xí)和表示能力,能夠有效學(xué)習(xí)輸入數(shù)據(jù)的復(fù)雜特征,并精確捕捉非線性關(guān)系,使其在各種任務(wù)中表現(xiàn)出色。

          缺點(diǎn):然而,隨著網(wǎng)絡(luò)層數(shù)的增加,梯度消失問(wèn)題逐漸凸顯,這可能導(dǎo)致訓(xùn)練過(guò)程的不穩(wěn)定。此外,DNN容易陷入局部最小值,從而限制了其性能,通常需要復(fù)雜的初始化策略和正則化技術(shù)來(lái)應(yīng)對(duì)這些問(wèn)題。

          使用場(chǎng)景:DNN在多個(gè)領(lǐng)域有著廣泛的應(yīng)用,包括圖像分類、語(yǔ)音識(shí)別、自然語(yǔ)言處理以及推薦系統(tǒng)等。

          Python示例代碼:

          import tensorflow as tffrom tensorflow.keras.datasets import irisfrom tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Dense
          # 加載鳶尾花數(shù)據(jù)集(x_train, y_train), (x_test, y_test) = iris.load_data()
          # 對(duì)數(shù)據(jù)進(jìn)行預(yù)處理y_train = tf.keras.utils.to_categorical(y_train) # 將標(biāo)簽轉(zhuǎn)換為one-hot編碼y_test = tf.keras.utils.to_categorical(y_test)
          # 創(chuàng)建神經(jīng)網(wǎng)絡(luò)模型model = Sequential([ Dense(64, activation='relu', input_shape=(4,)), # 輸入層,有4個(gè)輸入節(jié)點(diǎn) Dense(32, activation='relu'), # 隱藏層,有32個(gè)節(jié)點(diǎn) Dense(3, activation='softmax') # 輸出層,有3個(gè)節(jié)點(diǎn)(對(duì)應(yīng)3種鳶尾花)])
          # 編譯模型model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
          # 訓(xùn)練模型model.fit(x_train, y_train, epochs=10, batch_size=32)
          # 測(cè)試模型test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)print('Test accuracy:', test_acc)


          2、卷積神經(jīng)網(wǎng)絡(luò)(CNN)

          模型原理:卷積神經(jīng)網(wǎng)絡(luò)(CNN)是一種專門(mén)為處理圖像數(shù)據(jù)而設(shè)計(jì)的神經(jīng)網(wǎng)絡(luò),由Lechun大佬設(shè)計(jì)的Lenet是CNN的開(kāi)山之作。CNN通過(guò)使用卷積層來(lái)捕獲局部特征,并通過(guò)池化層來(lái)降低數(shù)據(jù)的維度。卷積層對(duì)輸入數(shù)據(jù)進(jìn)行局部卷積操作,并使用參數(shù)共享機(jī)制來(lái)減少模型的參數(shù)數(shù)量。池化層則對(duì)卷積層的輸出進(jìn)行下采樣,以降低數(shù)據(jù)的維度和計(jì)算復(fù)雜度。這種結(jié)構(gòu)特別適合處理圖像數(shù)據(jù)。


          模型訓(xùn)練:采用反向傳播算法與梯度下降優(yōu)化策略,持續(xù)調(diào)整權(quán)重。在訓(xùn)練過(guò)程
          中,精準(zhǔn)計(jì)算損失函數(shù)關(guān)于權(quán)重的梯度,借助梯度下降或其他高級(jí)優(yōu)化算法,精確調(diào)整權(quán)重,旨在最小化損失函數(shù),提升模型的準(zhǔn)確度。

          優(yōu)勢(shì):本模型在處理圖像數(shù)據(jù)方面表現(xiàn)出色,尤其擅長(zhǎng)捕捉局部細(xì)微特征。得益于其精簡(jiǎn)的參數(shù)設(shè)計(jì),有效降低了過(guò)擬合的風(fēng)險(xiǎn),提升了模型的泛化能力。

          局限:對(duì)于序列數(shù)據(jù)或需處理長(zhǎng)距離依賴關(guān)系的任務(wù),本模型可能難以勝任。此外,為了確保模型的輸入質(zhì)量,可能需要對(duì)原始數(shù)據(jù)進(jìn)行繁瑣的預(yù)處理工作。

          適用場(chǎng)景:本模型在圖像分類、目標(biāo)檢測(cè)、語(yǔ)義分割等圖像處理任務(wù)中表現(xiàn)出色,能夠?yàn)橄嚓P(guān)應(yīng)用提供強(qiáng)有力的支持。

          Python示例代碼


          import tensorflow as tffrom tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
          # 設(shè)置超參數(shù)input_shape = (28, 28, 1) # 假設(shè)輸入圖像是28x28像素的灰度圖像num_classes = 10 # 假設(shè)有10個(gè)類別
          # 創(chuàng)建CNN模型model = Sequential()
          # 添加卷積層,32個(gè)3x3的卷積核,使用ReLU激活函數(shù)model.add(Conv2D(32, (3, 3), activation='relu', input_shape=input_shape))
          # 添加卷積層,64個(gè)3x3的卷積核,使用ReLU激活函數(shù)model.add(Conv2D(64, (3, 3), activation='relu'))
          # 添加最大池化層,池化窗口為2x2model.add(MaxPooling2D(pool_size=(2, 2)))
          # 將多維輸入展平為一維,以便輸入全連接層model.add(Flatten())
          # 添加全連接層,128個(gè)神經(jīng)元,使用ReLU激活函數(shù)model.add(Dense(128, activation='relu'))
          # 添加輸出層,10個(gè)神經(jīng)元,使用softmax激活函數(shù)進(jìn)行多分類model.add(Dense(num_classes, activation='softmax'))
          # 編譯模型,使用交叉熵作為損失函數(shù),使用Adam優(yōu)化器model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
          # 打印模型結(jié)構(gòu)model.summary()


          3、殘差網(wǎng)絡(luò)(ResNet)

          隨著深度學(xué)習(xí)的快速發(fā)展,深度神經(jīng)網(wǎng)絡(luò)在多個(gè)領(lǐng)域取得了顯著的成功。然而,深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練面臨著梯度消失和模型退化等問(wèn)題,這限制了網(wǎng)絡(luò)的深度和性能。為了解決這些問(wèn)題,殘差網(wǎng)絡(luò)(ResNet)被提出。

          模型原理:

          ResNet,通過(guò)獨(dú)特設(shè)計(jì)的“殘差塊”,攻克了深度神經(jīng)網(wǎng)絡(luò)所面臨的梯度消失與模型退化兩大難題。殘差塊巧妙地融合了“跳躍連接”與多個(gè)非線性層,使梯度得以順暢地從深層反向傳遞至淺層,顯著提升了深度網(wǎng)絡(luò)的訓(xùn)練效果。正是這一創(chuàng)新,讓ResNet能夠構(gòu)建出極其深層的網(wǎng)絡(luò)結(jié)構(gòu),并在眾多任務(wù)中展現(xiàn)出卓越的性能。

          模型訓(xùn)練:

          在訓(xùn)練ResNet時(shí),通常運(yùn)用反向傳播算法與諸如隨機(jī)梯度下降的優(yōu)化算法。訓(xùn)練過(guò)程中,計(jì)算損失函數(shù)關(guān)于權(quán)重的梯度,并借助優(yōu)化算法調(diào)整權(quán)重,從而最小化損失函數(shù)。為了進(jìn)一步提高訓(xùn)練速度和模型的泛化能力,我們還會(huì)運(yùn)用正則化技術(shù)、集成學(xué)習(xí)等策略。

          優(yōu)點(diǎn):

          1. 突破梯度消失與模型退化:憑借殘差塊與跳躍連接的引入,ResNet成功解決了深度網(wǎng)絡(luò)的訓(xùn)練難題,有效避免了梯度消失與模型退化現(xiàn)象。
          2. 構(gòu)建深層網(wǎng)絡(luò)結(jié)構(gòu):由于克服了梯度消失與模型退化問(wèn)題,ResNet得以構(gòu)建更深層的網(wǎng)絡(luò)結(jié)構(gòu),顯著提升了模型的性能。
          3. 多任務(wù)卓越表現(xiàn):得益于其強(qiáng)大的特征學(xué)習(xí)和表示能力,ResNet在圖像分類、目標(biāo)檢測(cè)等多種任務(wù)中均展現(xiàn)出卓越的性能。

          缺點(diǎn):

          1. 計(jì)算資源需求高:由于ResNet通常需要構(gòu)建深層的網(wǎng)絡(luò)結(jié)構(gòu),導(dǎo)致計(jì)算量龐大,對(duì)計(jì)算資源和訓(xùn)練時(shí)間有著較高的要求。
          2. 參數(shù)調(diào)優(yōu)難度大:ResNet的參數(shù)數(shù)量眾多,需要投入大量的時(shí)間和精力進(jìn)行參數(shù)調(diào)優(yōu)和超參數(shù)選擇。
          3. 對(duì)初始化權(quán)重敏感:ResNet對(duì)初始化權(quán)重的選擇十分敏感,不合適的初始化可能導(dǎo)致訓(xùn)練不穩(wěn)定或過(guò)擬合等問(wèn)題。

          應(yīng)用場(chǎng)景:

          ResNet在計(jì)算機(jī)視覺(jué)領(lǐng)域具有廣泛的應(yīng)用價(jià)值,如圖像分類、目標(biāo)檢測(cè)、人臉識(shí)別等。此外,其在自然語(yǔ)言處理、語(yǔ)音識(shí)別等領(lǐng)域也具有一定的應(yīng)用潛力。

          Python示例代碼(簡(jiǎn)化版):


          from keras.models import Sequentialfrom keras.layers import Conv2D, Add, Activation, BatchNormalization, Shortcut
          def residual_block(input, filters): x = Conv2D(filters=filters, kernel_size=(3, 3), padding='same')(input) x = BatchNormalization()(x) x = Activation('relu')(x) x = Conv2D(filters=filters, kernel_size=(3, 3), padding='same')(x) x = BatchNormalization()(x) x = Activation('relu')(x) return Add()([x, input]) # Add shortcut connection
          # 構(gòu)建ResNet模型model = Sequential()# 添加輸入層和其他必要的層# ...# 添加殘差塊model.add(residual_block(previous_layer, filters=64))# 繼續(xù)添加更多的殘差塊和其他層# ...# 添加輸出層# ...
          # 編譯和訓(xùn)練模型# model.compile(...)# model.fit(...)


          4、LSTM(長(zhǎng)短時(shí)記憶網(wǎng)絡(luò))

          在處理序列數(shù)據(jù)時(shí),傳統(tǒng)的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)面臨著梯度消失和模型退化等問(wèn)題,這限制了網(wǎng)絡(luò)的深度和性能。為了解決這些問(wèn)題,LSTM被提出。




          模型原理:

          LSTM借助創(chuàng)新的“門(mén)控”機(jī)制,巧妙地調(diào)控信息的流動(dòng),從而攻克了梯度消失和模型退化這兩大難題。具體而言,LSTM擁有三個(gè)核心門(mén)控機(jī)制:輸入門(mén)、遺忘門(mén)和輸出門(mén)。輸入門(mén)負(fù)責(zé)篩選并接納新信息,遺忘門(mén)則決定哪些舊信息應(yīng)當(dāng)被丟棄,而輸出門(mén)則掌控著最終輸出的信息流。正是這些精巧的門(mén)控機(jī)制,讓LSTM在應(yīng)對(duì)長(zhǎng)期依賴問(wèn)題時(shí)展現(xiàn)出了卓越的性能。

          模型訓(xùn)練:

          LSTM的訓(xùn)練過(guò)程通常采用反向傳播算法和優(yōu)化算法(如隨機(jī)梯度下降)相結(jié)合的方式。訓(xùn)練過(guò)程中,算法會(huì)精確計(jì)算損失函數(shù)關(guān)于權(quán)重的梯度,并利用優(yōu)化算法不斷調(diào)整權(quán)重,以最小化損失函數(shù)。為了進(jìn)一步提升訓(xùn)練效率和模型的泛化能力,還可以考慮采用正則化技術(shù)、集成學(xué)習(xí)等高級(jí)策略。

          優(yōu)點(diǎn):

          1. 攻克梯度消失和模型退化:通過(guò)引入門(mén)控機(jī)制,LSTM在解決長(zhǎng)期依賴問(wèn)題上表現(xiàn)卓越,有效避免了梯度消失和模型退化的問(wèn)題。
          2. 構(gòu)建深邃網(wǎng)絡(luò)結(jié)構(gòu):得益于對(duì)梯度消失和模型退化的處理,LSTM能夠構(gòu)建深度龐大的網(wǎng)絡(luò)結(jié)構(gòu),從而充分發(fā)掘數(shù)據(jù)的內(nèi)在規(guī)律,提升模型性能。
          3. 多任務(wù)表現(xiàn)出色:LSTM在文本生成、語(yǔ)音識(shí)別、機(jī)器翻譯等多個(gè)任務(wù)中均展現(xiàn)了出色的性能,證明了其強(qiáng)大的特征學(xué)習(xí)和表示能力。

          缺點(diǎn):

          1. 參數(shù)調(diào)優(yōu)挑戰(zhàn)大:LSTM涉及大量參數(shù),調(diào)優(yōu)過(guò)程繁瑣,需要投入大量時(shí)間和精力進(jìn)行超參數(shù)選擇和調(diào)整。
          2. 對(duì)初始化敏感:LSTM對(duì)權(quán)重的初始化極為敏感,不合適的初始化可能導(dǎo)致訓(xùn)練不穩(wěn)定或出現(xiàn)過(guò)擬合問(wèn)題。
          3. 計(jì)算量大:由于LSTM通常構(gòu)建深度網(wǎng)絡(luò)結(jié)構(gòu),計(jì)算量龐大,對(duì)計(jì)算資源和訓(xùn)練時(shí)間要求較高。

          使用場(chǎng)景:

          在自然語(yǔ)言處理領(lǐng)域,LSTM憑借其獨(dú)特的優(yōu)勢(shì)在文本生成、機(jī)器翻譯、語(yǔ)音識(shí)別等任務(wù)中廣泛應(yīng)用。此外,LSTM在時(shí)間序列分析、推薦系統(tǒng)等領(lǐng)域也展現(xiàn)出了巨大的潛力。

          Python示例代碼(簡(jiǎn)化版):

             
          Python


          from keras.models import Sequentialfrom keras.layers import LSTM, Dense
          def lstm_model(input_shape, num_classes): model = Sequential() model.add(LSTM(units=128, input_shape=input_shape)) # 添加一個(gè)LSTM層 model.add(Dense(units=num_classes, activation='softmax')) # 添加一個(gè)全連接層 return model


          5、Word2Vec

          Word2Vec模型是表征學(xué)習(xí)的開(kāi)山之作。由Google的科學(xué)家們開(kāi)發(fā)的一種用于自然語(yǔ)言處理的(淺層)神經(jīng)網(wǎng)絡(luò)模型。Word2Vec模型的目標(biāo)是將每個(gè)詞向量化為一個(gè)固定大小的向量,這樣相似的詞就可以被映射到相近的向量空間中。


          模型原理


          Word2Vec模型基于神經(jīng)網(wǎng)絡(luò),利用輸入的詞預(yù)測(cè)其上下文詞。在訓(xùn)練過(guò)程中,模型嘗試學(xué)習(xí)到每個(gè)詞的向量表示,使得在給定上下文中出現(xiàn)的詞與目標(biāo)詞的向量表示盡可能接近。這種訓(xùn)練方式稱為“Skip-gram”或“Continuous Bag of Words”(CBOW)。

          模型訓(xùn)練


          Word2Vec模型的訓(xùn)練離不開(kāi)豐富的文本數(shù)據(jù)資源。首先,我們會(huì)將這些數(shù)據(jù)預(yù)處理為詞或n-gram的序列。接著,運(yùn)用神經(jīng)網(wǎng)絡(luò)對(duì)這些詞或n-gram的上下文進(jìn)行深度學(xué)習(xí)。在訓(xùn)練過(guò)程中,模型會(huì)持續(xù)調(diào)整詞的向量表示,以最小化預(yù)測(cè)誤差,從而精確捕捉語(yǔ)義內(nèi)涵。

          優(yōu)點(diǎn)概覽


          1. 語(yǔ)義相似性:Word2Vec能夠精準(zhǔn)捕捉詞與詞之間的語(yǔ)義關(guān)聯(lián),使得在向量空間中,意義相近的詞靠得更近。
          2. 訓(xùn)練效率:Word2Vec訓(xùn)練過(guò)程高效,輕松應(yīng)對(duì)大規(guī)模文本數(shù)據(jù)的處理需求。
          3. 可解釋性:Word2Vec生成的詞向量具有實(shí)際應(yīng)用價(jià)值,可用于諸如聚類、分類、語(yǔ)義相似性計(jì)算等多種任務(wù)。


          潛在不足


          1. 數(shù)據(jù)稀疏性:對(duì)于未在訓(xùn)練數(shù)據(jù)中出現(xiàn)的詞,Word2Vec可能無(wú)法生成精準(zhǔn)的向量表示。
          2. 上下文窗口限制:Word2Vec的上下文窗口固定,可能會(huì)忽略遠(yuǎn)距離的詞與詞之間的依賴關(guān)系。
          3. 計(jì)算資源需求:Word2Vec的訓(xùn)練和推理過(guò)程對(duì)計(jì)算資源有一定要求。
          4. 參數(shù)調(diào)整挑戰(zhàn):Word2Vec的性能表現(xiàn)高度依賴于超參數(shù)(如向量維度、窗口大小、學(xué)習(xí)率等)的細(xì)致調(diào)整。


          應(yīng)用領(lǐng)域


          Word2Vec在自然語(yǔ)言處理領(lǐng)域的應(yīng)用廣泛,如文本分類、情感分析、信息提取等。例如,它可以被用來(lái)識(shí)別新聞報(bào)道的情感傾向(正面或負(fù)面),或用于從大量文本中提取關(guān)鍵實(shí)體或概念。

          Python示例代碼


             
          Python
          
            


          from gensim.models import Word2Vecfrom nltk.tokenize import word_tokenizeimport nltk
          # 下載punkt分詞模型nltk.download('punkt')
          # 假設(shè)我們有一些文本數(shù)據(jù)sentences = [ "我喜歡吃蘋(píng)果", "蘋(píng)果是我的最愛(ài)", "我不喜歡吃香蕉", "香蕉太甜了", "我喜歡讀書(shū)", "讀書(shū)讓我快樂(lè)"]
          # 對(duì)文本數(shù)據(jù)進(jìn)行分詞處理sentences = [word_tokenize(sentence) for sentence in sentences]
          # 創(chuàng)建 Word2Vec 模型# 這里的參數(shù)可以根據(jù)需要進(jìn)行調(diào)整model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)
          # 訓(xùn)練模型model.train(sentences, total_examples=model.corpus_count, epochs=10)
          # 獲取詞向量vector = model.wv['蘋(píng)果']
          # 找出與“蘋(píng)果”最相似的詞similar_words = model.wv.most_similar('蘋(píng)果')
          print("蘋(píng)果的詞向量:", vector)print("與蘋(píng)果最相似的詞:", similar_words)


          6、Transformer

          背景:

          在深度學(xué)習(xí)的早期階段,卷積神經(jīng)網(wǎng)絡(luò)(CNN)在圖像識(shí)別和自然語(yǔ)言處理領(lǐng)域取得了顯著的成功。然而,隨著任務(wù)復(fù)雜度的增加,序列到序列(Seq2Seq)模型和循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)成為處理序列數(shù)據(jù)的常用方法。盡管RNN及其變體在某些任務(wù)上表現(xiàn)良好,但它們?cè)谔幚黹L(zhǎng)序列時(shí)容易遇到梯度消失和模型退化問(wèn)題。為了解決這些問(wèn)題,Transformer模型被提出。而后的GPT、Bert等大模型都是基于Transformer實(shí)現(xiàn)了卓越的性能!


          模型原理:

          Transformer模型精巧地結(jié)合了編碼器和解碼器兩大部分,每一部分均由若干相同構(gòu)造的“層”堆疊而成。這些層巧妙地將自注意力子層與線性前饋神經(jīng)網(wǎng)絡(luò)子層結(jié)合在一起。自注意力子層巧妙地運(yùn)用點(diǎn)積注意力機(jī)制,為每個(gè)位置的輸入序列編織獨(dú)特的表示,而線性前饋神經(jīng)網(wǎng)絡(luò)子層則汲取自注意力層的智慧,產(chǎn)出富含信息的輸出表示。值得一提的是,編碼器和解碼器各自裝備了一個(gè)位置編碼層,專門(mén)捕捉輸入序列中的位置脈絡(luò)。

          模型訓(xùn)練:

          Transformer模型的修煉之道依賴于反向傳播算法和優(yōu)化算法,如隨機(jī)梯度下降。在修煉過(guò)程中,它細(xì)致地計(jì)算損失函數(shù)對(duì)權(quán)重的梯度,并運(yùn)用優(yōu)化算法微調(diào)這些權(quán)重,以追求損失函數(shù)的最小化。為了加速修煉進(jìn)度和提高模型的通用能力,修煉者們還常常采納正則化技術(shù)、集成學(xué)習(xí)等策略。

          優(yōu)點(diǎn):

          1. 梯度消失與模型退化之困得以解決:Transformer模型憑借其獨(dú)特的自注意力機(jī)制,能夠游刃有余地捕捉序列中的長(zhǎng)期依賴關(guān)系,從而擺脫了梯度消失和模型退化的桎梏。
          2. 并行計(jì)算能力卓越:Transformer模型的計(jì)算架構(gòu)具備天然的并行性,使得在GPU上能夠風(fēng)馳電掣地進(jìn)行訓(xùn)練和推斷。
          3. 多任務(wù)表現(xiàn)出色:憑借強(qiáng)大的特征學(xué)習(xí)和表示能力,Transformer模型在機(jī)器翻譯、文本分類、語(yǔ)音識(shí)別等多項(xiàng)任務(wù)中展現(xiàn)了卓越的性能。

          缺點(diǎn):

          1. 計(jì)算資源需求龐大:由于Transformer模型的計(jì)算可并行性,訓(xùn)練和推斷過(guò)程需要龐大的計(jì)算資源支持。
          2. 對(duì)初始化權(quán)重敏感:Transformer模型對(duì)初始化權(quán)重的選擇極為挑剔,不當(dāng)?shù)某跏蓟赡軐?dǎo)致訓(xùn)練過(guò)程不穩(wěn)定或出現(xiàn)過(guò)擬合問(wèn)題。
          3. 長(zhǎng)期依賴關(guān)系處理受限:盡管Transformer模型已有效解決梯度消失和模型退化問(wèn)題,但在處理超長(zhǎng)序列時(shí)仍面臨挑戰(zhàn)。

          應(yīng)用場(chǎng)景:

          Transformer模型在自然語(yǔ)言處理領(lǐng)域的應(yīng)用可謂廣泛,涵蓋機(jī)器翻譯、文本分類、文本生成等諸多方面。此外,Transformer模型還在圖像識(shí)別、語(yǔ)音識(shí)別等領(lǐng)域大放異彩。

          Python示例代碼(簡(jiǎn)化版):


          import torchimport torch.nn as nnimport torch.optim as optim#該示例僅用于說(shuō)明Transformer的基本結(jié)構(gòu)和原理。實(shí)際的Transformer模型(如GPT或BERT)要復(fù)雜得多,并且需要更多的預(yù)處理步驟,如分詞、填充、掩碼等。class Transformer(nn.Module):    def __init__(self, d_model, nhead, num_encoder_layers, num_decoder_layers, dim_feedforward=2048):        super(Transformer, self).__init__()        self.model_type = 'Transformer'        # encoder layers        self.src_mask = None        self.pos_encoder = PositionalEncoding(d_model, max_len=5000)        encoder_layers = nn.TransformerEncoderLayer(d_model, nhead, dim_feedforward)        self.transformer_encoder = nn.TransformerEncoder(encoder_layers, num_encoder_layers)        # decoder layers        decoder_layers = nn.TransformerDecoderLayer(d_model, nhead, dim_feedforward)        self.transformer_decoder = nn.TransformerDecoder(decoder_layers, num_decoder_layers)        # decoder        self.decoder = nn.Linear(d_model, d_model)        self.init_weights()    def init_weights(self):        initrange = 0.1        self.decoder.weight.data.uniform_(-initrange, initrange)    def forward(self, src, tgt, teacher_forcing_ratio=0.5):        batch_size = tgt.size(0)        tgt_len = tgt.size(1)        tgt_vocab_size = self.decoder.out_features        # forward pass through encoder        src = self.pos_encoder(src)        output = self.transformer_encoder(src)        # prepare decoder input with teacher forcing        target_input = tgt[:, :-1].contiguous()        target_input = target_input.view(batch_size * tgt_len, -1)        target_input = torch.autograd.Variable(target_input)        # forward pass through decoder        output2 = self.transformer_decoder(target_input, output)        output2 = output2.view(batch_size, tgt_len, -1)        # generate predictions        prediction = self.decoder(output2)        prediction = prediction.view(batch_size * tgt_len, tgt_vocab_size)        return prediction[:, -1], predictionclass PositionalEncoding(nn.Module):    def __init__(self, d_model, max_len=5000):        super(PositionalEncoding, self).__init__()        # Compute the positional encodings once in log space.        pe = torch.zeros(max_len, d_model)        position = torch.arange(0, max_len).unsqueeze(1).float()        div_term = torch.exp(torch.arange(0, d_model, 2).float() *                             -(torch.log(torch.tensor(10000.0)) / d_model))        pe[:, 0::2] = torch.sin(position * div_term)        pe[:, 1::2] = torch.cos(position * div_term)        pe = pe.unsqueeze(0)        self.register_buffer('pe', pe)    def forward(self, x):        x = x + self.pe[:, :x.size(1)]        return x# 超參數(shù)d_model = 512nhead = 8num_encoder_layers = 6num_decoder_layers = 6dim_feedforward = 2048# 實(shí)例化模型model = Transformer(d_model, nhead, num_encoder_layers, num_decoder_layers, dim_feedforward)# 隨機(jī)生成數(shù)據(jù)src = torch.randn(10, 32, 512)tgt = torch.randn(10, 32, 512)# 前向傳播prediction, predictions = model(src, tgt)
          print(prediction)


          7、生成對(duì)抗網(wǎng)絡(luò)(GAN)


          GAN的思想源于博弈論中的零和游戲,其中一個(gè)玩家試圖生成最逼真的假數(shù)據(jù),而另一個(gè)玩家則嘗試區(qū)分真實(shí)數(shù)據(jù)與假數(shù)據(jù)。GAN由蒙提霍爾問(wèn)題(一種生成模型與判別模型組合的問(wèn)題)演變而來(lái),但與蒙提霍爾問(wèn)題不同,GAN不強(qiáng)調(diào)逼近某些概率分布或生成某種樣本,而是直接使用生成模型與判別模型進(jìn)行對(duì)抗。

          模型原理:


          GAN由兩部分組成:生成器(Generator)和判別器(Discriminator)。生成器致力于創(chuàng)作逼真的假數(shù)據(jù),而判別器則致力于分辨輸入數(shù)據(jù)的真?zhèn)巍T诔掷m(xù)的博弈中,兩者不斷調(diào)整參數(shù),直至達(dá)到一種動(dòng)態(tài)平衡。這時(shí),生成器生成的假數(shù)據(jù)如此逼真,判別器已難以分辨其真?zhèn)巍?/span>


          模型訓(xùn)練:


          GAN的訓(xùn)練過(guò)程是一個(gè)微妙的優(yōu)化過(guò)程。在每個(gè)訓(xùn)練步驟中,生成器首先利用當(dāng)前參數(shù)生成假數(shù)據(jù),判別器隨后對(duì)這些數(shù)據(jù)的真實(shí)性進(jìn)行判斷。根據(jù)判別結(jié)果,判別器的參數(shù)得到更新。同時(shí),為了防止判別器過(guò)于精準(zhǔn),我們也會(huì)對(duì)生成器進(jìn)行訓(xùn)練,使其能夠創(chuàng)作出能欺騙判別器的假數(shù)據(jù)。這個(gè)過(guò)程反復(fù)進(jìn)行,直至雙方達(dá)到一種微妙的平衡。


          優(yōu)點(diǎn):


          1. 強(qiáng)大的生成能力:GAN能夠深入挖掘數(shù)據(jù)的內(nèi)在結(jié)構(gòu)和分布規(guī)律,創(chuàng)作出極其逼真的假數(shù)據(jù)。

          2. 無(wú)需顯式監(jiān)督:在GAN的訓(xùn)練過(guò)程中,我們無(wú)需提供顯式的標(biāo)簽信息,只需提供真實(shí)數(shù)據(jù)即可。

          3. 靈活性高:GAN可以與其他模型無(wú)縫結(jié)合,如與自編碼器結(jié)合形成AutoGAN,或與卷積神經(jīng)網(wǎng)絡(luò)結(jié)合形成DCGAN等,從而拓展其應(yīng)用范圍。


          缺點(diǎn):


          1. 訓(xùn)練不穩(wěn)定:GAN的訓(xùn)練過(guò)程可能充滿挑戰(zhàn),有時(shí)會(huì)出現(xiàn)模式崩潰(mode collapse)的問(wèn)題,即生成器只專注于生成某一種樣本,導(dǎo)致判別器難以準(zhǔn)確判斷。

          2. 調(diào)試?yán)щy:生成器和判別器之間的相互作用錯(cuò)綜復(fù)雜,這使得GAN的調(diào)試變得頗具挑戰(zhàn)性。

          3. 評(píng)估難度大:鑒于GAN出色的生成能力,準(zhǔn)確評(píng)估其生成的假數(shù)據(jù)的真實(shí)性和多樣性并非易事。


          使用場(chǎng)景:


          1. 圖像生成:GAN在圖像生成領(lǐng)域大放異彩,能夠創(chuàng)作出各種風(fēng)格的圖像,如根據(jù)文字描述生成圖像,或?qū)⒁环鶊D像轉(zhuǎn)換為另一種風(fēng)格等。

          2. 數(shù)據(jù)增強(qiáng):GAN可以生成與真實(shí)數(shù)據(jù)極為相似的假數(shù)據(jù),用于擴(kuò)充數(shù)據(jù)集或提升模型的泛化能力。

          3. 圖像修復(fù):借助GAN,我們能夠修復(fù)圖像中的缺陷或消除圖像中的噪聲,使圖像質(zhì)量得到顯著提升。

          4. 視頻生成:基于GAN的視頻生成已成為當(dāng)前研究的熱點(diǎn)之一,能夠創(chuàng)作出各種風(fēng)格獨(dú)特的視頻內(nèi)容。


          簡(jiǎn)單的Python示例代碼:


          以下是一個(gè)簡(jiǎn)單的GAN示例代碼,使用PyTorch實(shí)現(xiàn):


          import torchimport torch.nn as nnimport torch.optim as optimimport torch.nn.functional as F# 定義生成器和判別器網(wǎng)絡(luò)結(jié)構(gòu)  class Generator(nn.Module):def __init__(self, input_dim, output_dim):super(Generator, self).__init__()self.model = nn.Sequential(nn.Linear(input_dim, 128),nn.ReLU(),nn.Linear(128, output_dim),nn.Sigmoid())def forward(self, x):return self.model(x)class Discriminator(nn.Module):def __init__(self, input_dim):super(Discriminator, self).__init__()self.model = nn.Sequential(nn.Linear(input_dim, 128),nn.ReLU(),nn.Linear(128, 1),nn.Sigmoid())def forward(self, x):return self.model(x)# 實(shí)例化生成器和判別器對(duì)象  input_dim = 100  # 輸入維度可根據(jù)實(shí)際需求調(diào)整  output_dim = 784  # 對(duì)于MNIST數(shù)據(jù)集,輸出維度為28*28=784  gen = Generator(input_dim, output_dim)disc = Discriminator(output_dim)# 定義損失函數(shù)和優(yōu)化器  criterion = nn.BCELoss()  # 二分類交叉熵?fù)p失函數(shù)適用于GAN的判別器部分和生成器的logistic損失部分。但是,通常更常見(jiàn)的選擇是采用二元交叉熵?fù)p失函數(shù)(binary cross


          8、Diffusion擴(kuò)散模型


          火爆全網(wǎng)的Sora大模型的底層就是Diffusion模型,它是一種基于深度學(xué)習(xí)的生成模型,它主要用于生成連續(xù)數(shù)據(jù),如圖像、音頻等。Diffusion模型的核心思想是通過(guò)逐步添加噪聲來(lái)將復(fù)雜數(shù)據(jù)分布轉(zhuǎn)化為簡(jiǎn)單的高斯分布,然后再通過(guò)逐步去除噪聲來(lái)從簡(jiǎn)單分布中生成數(shù)據(jù)。



          算法原理:


          Diffusion Model的基本思想是將數(shù)據(jù)生成過(guò)程看作一個(gè)馬爾可夫鏈。從目標(biāo)數(shù)據(jù)開(kāi)始,每一步都向隨機(jī)噪聲靠近,直到達(dá)到純?cè)肼暊顟B(tài)。然后,通過(guò)反向過(guò)程,從純?cè)肼曋饾u恢復(fù)到目標(biāo)數(shù)據(jù)。這個(gè)過(guò)程通常由一系列的條件概率分布來(lái)描述。


          訓(xùn)練過(guò)程:


          1. 前向過(guò)程(Forward Process):從真實(shí)數(shù)據(jù)開(kāi)始,逐步添加噪聲,直到達(dá)到純?cè)肼暊顟B(tài)。這個(gè)過(guò)程中,需要計(jì)算每一步的噪聲水平,并保存下來(lái)。

          2. 反向過(guò)程(Reverse Process):從純?cè)肼曢_(kāi)始,逐步去除噪聲,直到恢復(fù)到目標(biāo)數(shù)據(jù)。在這個(gè)過(guò)程中,使用神經(jīng)網(wǎng)絡(luò)(通常是U-Net結(jié)構(gòu))來(lái)預(yù)測(cè)每一步的噪聲水平,并據(jù)此生成數(shù)據(jù)。

          3. 優(yōu)化:通過(guò)最小化真實(shí)數(shù)據(jù)與生成數(shù)據(jù)之間的差異來(lái)訓(xùn)練模型。常用的損失函數(shù)包括MSE(均方誤差)和BCE(二元交叉熵)。


          優(yōu)點(diǎn):


          1. 生成質(zhì)量高:由于Diffusion Model采用了逐步擴(kuò)散和恢復(fù)的過(guò)程,因此可以生成高質(zhì)量的數(shù)據(jù)。

          2. 可解釋性強(qiáng):Diffusion Model的生成過(guò)程具有明顯的物理意義,便于理解和解釋。

          3. 靈活性好:Diffusion Model可以處理各種類型的數(shù)據(jù),包括圖像、文本和音頻等。


          缺點(diǎn):


          1. 訓(xùn)練時(shí)間長(zhǎng):由于Diffusion Model需要進(jìn)行多步的擴(kuò)散和恢復(fù)過(guò)程,因此訓(xùn)練時(shí)間較長(zhǎng)。

          2. 計(jì)算資源需求大:為了保證生成質(zhì)量,Diffusion Model通常需要較大的計(jì)算資源,包括內(nèi)存和計(jì)算力。


          適用場(chǎng)景:


          Diffusion Model適用于需要生成高質(zhì)量數(shù)據(jù)的場(chǎng)景,如圖像生成、文本生成和音頻生成等。同時(shí),由于其可解釋性強(qiáng)和靈活性好的特點(diǎn),Diffusion Model也可以應(yīng)用于其他需要深度生成模型的領(lǐng)域。


          Python示例代碼:


          import torchimport torch.nn as nnimport torch.optim as optim
          # 定義U-Net模型class UNet(nn.Module): # ...省略模型定義...
          # 定義Diffusion Modelclass DiffusionModel(nn.Module): def __init__(self, unet): super(DiffusionModel, self).__init__() self.unet = unet
          def forward(self, x_t, t): # x_t為當(dāng)前時(shí)刻的數(shù)據(jù),t為噪聲水平 # 使用U-Net預(yù)測(cè)噪聲水平 noise_pred = self.unet(x_t, t) # 根據(jù)噪聲水平生成數(shù)據(jù) x_t_minus_1 = x_t - noise_pred * torch.sqrt(1 - torch.exp(-2 * t)) return x_t_minus_1
          # 初始化模型和優(yōu)化器unet = UNet()model = DiffusionModel(unet)optimizer = optim.Adam(model.parameters(), lr=0.001)
          # 訓(xùn)練過(guò)程for epoch in range(num_epochs): for x_real in dataloader: # 從數(shù)據(jù)加載器中獲取真實(shí)數(shù)據(jù) # 前向過(guò)程 x_t = x_real # 從真實(shí)數(shù)據(jù)開(kāi)始 for t in torch.linspace(0, 1, num_steps): # 添加噪聲 noise = torch.randn_like(x_t) * torch.sqrt(1 - torch.exp(-2 * t)) x_t = x_t + noise * torch.sqrt(torch.exp(-2 * t))
          # 計(jì)算預(yù)測(cè)噪聲 noise_pred = model(x_t, t)
          # 計(jì)算損失 loss = nn.MSELoss()(noise_pred, noise)
          # 反向傳播和優(yōu)化 optimizer.zero_grad() loss.backward() optimizer.step()


          9、圖神經(jīng)網(wǎng)絡(luò)(GNN)

          圖神經(jīng)網(wǎng)絡(luò)(Graph Neural Networks,簡(jiǎn)稱GNN)是一種專為圖結(jié)構(gòu)數(shù)據(jù)量身打造的深度學(xué)習(xí)模型。在現(xiàn)實(shí)世界中,圖結(jié)構(gòu)被廣泛用于描述各種復(fù)雜系統(tǒng),如社交網(wǎng)絡(luò)、分子結(jié)構(gòu)和交通網(wǎng)絡(luò)等。然而,傳統(tǒng)的機(jī)器學(xué)習(xí)模型在處理這些圖數(shù)據(jù)時(shí)經(jīng)常遇到瓶頸,而圖神經(jīng)網(wǎng)絡(luò)則為這些問(wèn)題提供了全新的解決方案。

          圖神經(jīng)網(wǎng)絡(luò)的核心思想在于,通過(guò)神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)圖中節(jié)點(diǎn)的特征表示,并同時(shí)考慮節(jié)點(diǎn)之間的關(guān)聯(lián)性。它利用迭代傳遞鄰居信息的方式來(lái)更新節(jié)點(diǎn)表示,使得相似的社區(qū)或鄰近的節(jié)點(diǎn)具有相似的表示。在每一層中,節(jié)點(diǎn)都會(huì)基于其鄰居節(jié)點(diǎn)的信息來(lái)更新自身的表示,從而能夠捕捉到圖中的復(fù)雜模式。



          在訓(xùn)練圖神經(jīng)網(wǎng)絡(luò)時(shí),通常采用基于梯度的優(yōu)化算法,如隨機(jī)梯度下降(SGD)。
          通過(guò)反向傳播算法計(jì)算損失函數(shù)的梯度,并根據(jù)這些梯度來(lái)更新神經(jīng)網(wǎng)絡(luò)的權(quán)重。常用的損失函數(shù)包括用于節(jié)點(diǎn)分類的交叉熵?fù)p失和用于鏈接預(yù)測(cè)的二元交叉熵?fù)p失等。

          圖神經(jīng)網(wǎng)絡(luò)具有以下顯著優(yōu)點(diǎn):首先,它具有強(qiáng)大的表示能力,能夠有效地捕捉圖結(jié)構(gòu)中的復(fù)雜模式,從而在節(jié)點(diǎn)分類、鏈接預(yù)測(cè)等任務(wù)上展現(xiàn)出卓越的性能。其次,它能夠自然處理圖結(jié)構(gòu)數(shù)據(jù),無(wú)需將圖轉(zhuǎn)換為矩陣形式,從而避免了大規(guī)模稀疏矩陣帶來(lái)的計(jì)算和存儲(chǔ)開(kāi)銷。最后,圖神經(jīng)網(wǎng)絡(luò)具有很強(qiáng)的可擴(kuò)展性,通過(guò)堆疊更多的層可以捕獲更復(fù)雜的模式。

          然而,圖神經(jīng)網(wǎng)絡(luò)也存在一些局限性。首先,隨著圖中節(jié)點(diǎn)和邊的增加,其計(jì)算復(fù)雜度會(huì)迅速上升,可能導(dǎo)致訓(xùn)練時(shí)間較長(zhǎng)。其次,圖神經(jīng)網(wǎng)絡(luò)的超參數(shù)較多,如鄰域大小、層數(shù)和學(xué)習(xí)率等,調(diào)整這些參數(shù)需要深入理解任務(wù)需求。此外,圖神經(jīng)網(wǎng)絡(luò)最初是為無(wú)向圖設(shè)計(jì)的,對(duì)于有向圖的適應(yīng)性可能較弱。

          在實(shí)際應(yīng)用中,圖神經(jīng)網(wǎng)絡(luò)在多個(gè)領(lǐng)域都展現(xiàn)出了廣闊的應(yīng)用前景。例如,在社交網(wǎng)絡(luò)分析中,它可以用于分析用戶之間的相似性、社區(qū)發(fā)現(xiàn)以及影響力傳播等問(wèn)題。在化學(xué)領(lǐng)域,圖神經(jīng)網(wǎng)絡(luò)可用于預(yù)測(cè)分子的性質(zhì)和化學(xué)反應(yīng)。此外,在推薦系統(tǒng)和知識(shí)圖譜等場(chǎng)景中,圖神經(jīng)網(wǎng)絡(luò)也發(fā)揮著重要作用,能夠幫助我們深入理解數(shù)據(jù)的內(nèi)在結(jié)構(gòu)和關(guān)聯(lián)性。

          GNN示例代碼:

             
          Python


          import torchfrom torch_geometric.nn import GCNConvfrom torch_geometric.data import Data
          # 定義一個(gè)簡(jiǎn)單的圖結(jié)構(gòu)edge_index = torch.tensor([[0, 1, 1, 2], [1, 0, 2, 1]], dtype=torch.long)x = torch.tensor([[-1], [0], [1]], dtype=torch.float)
          data = Data(x=x, edge_index=edge_index)
          # 定義一個(gè)簡(jiǎn)單的兩層圖卷積網(wǎng)絡(luò)class Net(torch.nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = GCNConv(dataset.num_features, 16) self.conv2 = GCNConv(16, dataset.num_classes)
          def forward(self, data): x, edge_index = data.x, data.edge_index
          x = self.conv1(x, edge_index) x = torch.relu(x) x = torch.dropout(x, training=self.training) x = self.conv2(x, edge_index)
          return torch.log_softmax(x, dim=1)
          # 實(shí)例化模型、損失函數(shù)和優(yōu)化器model = Net()criterion = torch.nn.NLLLoss()optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)
          # 訓(xùn)練模型model.train()for epoch in range(200): optimizer.zero_grad() out = model(data) loss = criterion(out[data.train_mask], data.y[data.train_mask]) loss.backward() optimizer.step()
          # 在測(cè)試集上評(píng)估模型model.eval()_, pred = model(data).max(dim=1)correct = int((pred == data.y).sum().item())acc = correct / int(data.y.sum().item())print('Accuracy: {:.4f}'.format(acc))


          10、深度強(qiáng)化學(xué)習(xí)(DQN)?


          模型原理:

          Deep Q-Networks (DQN) 是一種集成了深度學(xué)習(xí)和Q-learning的強(qiáng)化學(xué)習(xí)算法。其核心理念在于利用神經(jīng)網(wǎng)絡(luò)去逼近Q函數(shù),也就是狀態(tài)-動(dòng)作值函數(shù),從而為智能體在特定狀態(tài)下決策最優(yōu)動(dòng)作提供有力的支撐。

          模型訓(xùn)練:

          DQN的訓(xùn)練過(guò)程分為兩個(gè)關(guān)鍵階段:離線階段和在線階段。在離線階段,智能體通過(guò)與環(huán)境的互動(dòng)收集數(shù)據(jù),進(jìn)而訓(xùn)練神經(jīng)網(wǎng)絡(luò)。進(jìn)入在線階段,智能體開(kāi)始依賴神經(jīng)網(wǎng)絡(luò)進(jìn)行動(dòng)作的選擇和更新。為了防范過(guò)度估計(jì)的風(fēng)險(xiǎn),DQN創(chuàng)新性地引入了目標(biāo)網(wǎng)絡(luò)的概念,使得目標(biāo)網(wǎng)絡(luò)在一段時(shí)間內(nèi)保持穩(wěn)定,從而大幅提升了算法的穩(wěn)定性。

          優(yōu)點(diǎn):

          DQN以其出色的性能,成功攻克了高維度狀態(tài)和動(dòng)作空間的難題,尤其在處理連續(xù)動(dòng)作空間的問(wèn)題上表現(xiàn)卓越。它不僅穩(wěn)定性高,而且泛化能力強(qiáng),顯示出強(qiáng)大的實(shí)用價(jià)值。

          缺點(diǎn):

          DQN也存在一些局限性。例如,它有時(shí)可能陷入局部最優(yōu)解,難以自拔。此外,它需要龐大的數(shù)據(jù)和計(jì)算資源作為支撐,并且對(duì)參數(shù)的選擇十分敏感,這些都增加了其實(shí)際應(yīng)用的難度。

          使用場(chǎng)景:

          DQN依然在游戲、機(jī)器人控制等多個(gè)領(lǐng)域大放異彩,充分展現(xiàn)了其獨(dú)特的價(jià)值和廣泛的應(yīng)用前景。

          示例代碼:


          import tensorflow as tfimport numpy as npimport randomimport gymfrom collections import deque
          # 設(shè)置超參數(shù)BUFFER_SIZE = int(1e5) # 經(jīng)驗(yàn)回放存儲(chǔ)的大小BATCH_SIZE = 64 # 每次從經(jīng)驗(yàn)回放中抽取的樣本數(shù)量GAMMA = 0.99 # 折扣因子TAU = 1e-3 # 目標(biāo)網(wǎng)絡(luò)更新的步長(zhǎng)LR = 1e-3 # 學(xué)習(xí)率UPDATE_RATE = 10 # 每多少步更新一次目標(biāo)網(wǎng)絡(luò)
          # 定義經(jīng)驗(yàn)回放存儲(chǔ)class ReplayBuffer: def __init__(self, capacity): self.buffer = deque(maxlen=capacity)
          def push(self, state, action, reward, next_state, done): self.buffer.append((state, action, reward, next_state, done))
          def sample(self, batch_size): return random.sample(self.buffer, batch_size)
          # 定義DQN模型class DQN: def __init__(self, state_size, action_size): self.state_size = state_size self.action_size = action_size self.model = self._build_model()
          def _build_model(self): model = tf.keras.Sequential() model.add(tf.keras.layers.Dense(24, input_dim=self.state_size, activation='relu')) model.add(tf.keras.layers.Dense(24, activation='relu')) model.add(tf.keras.layers.Dense(self.action_size, activation='linear')) model.compile(loss='mse', optimizer=tf.keras.optimizers.Adam(lr=LR)) return model
          def remember(self, state, action, reward, next_state, done): self.replay_buffer.push((state, action, reward, next_state, done))
          def act(self, state): if np.random.rand() <= 0.01: return random.randrange(self.action_size) act_values = self.model.predict(state) return np.argmax(act_values[0])
          def replay(self, batch_size): minibatch = self.replay_buffer.sample(batch_size) for state, action, reward, next_state, done in minibatch: target = self.model.predict(state) if done: target[0][action] = reward else: Q_future = max(self.target_model.predict(next_state)[0]) target[0][action] = reward + GAMMA * Q_future self.model.fit(state, target, epochs=1, verbose=0) if self.step % UPDATE_RATE == 0: self.target_model.set_weights(self.model.get_weights())
          def load(self, name): self.model.load_weights(name)
          def save(self, name): self.model.save_weights(name)
          # 創(chuàng)建環(huán)境env = gym.make('CartPole-v1')state_size = env.observation_space.shape[0]action_size = env.action_space.n
          # 初始化DQN和回放存儲(chǔ)dqn = DQN(state_size, action_size)replay_buffer = ReplayBuffer(BUFFER_SIZE)
          # 訓(xùn)練過(guò)程total_steps = 10000for step in range(total_steps): state = env.reset() state = np.reshape(state, [1, state_size]) for episode in range(100): action = dqn.act(state) next_state, reward, done, _ = env.step(action) next_state = np.reshape(next_state, [1, state_size]) replay_buffer.remember(state, action, reward, next_state, done) state = next_state if done: break if replay_buffer.buffer.__


          編輯:王菁?


          ?

          瀏覽 215
          1點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          1點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99re在线免费视频 | 午夜日韩av | 中国黄色视频一级片 | 男男射精网站18 | 婷婷色丁香五月 |