大俠幸會(huì),在下全網(wǎng)同名「算法金」 0 基礎(chǔ)轉(zhuǎn) AI 上岸,多個(gè)算法賽 Top 「日更萬(wàn)日,讓更多人享受智能樂(lè)趣」 時(shí)間拉回 2019 年,有「計(jì)算機(jī)界諾貝爾獎(jiǎng)」之稱圖靈獎(jiǎng)獲得者公布,深度學(xué)習(xí)三巨頭:Yoshua Bengio、Geoffrey Hinton、Yann LeCun 眾望所歸。 圖靈獎(jiǎng)為
大俠幸會(huì),在下全網(wǎng)同名「算法金」 0 基礎(chǔ)轉(zhuǎn) AI 上岸,多個(gè)算法賽 Top 「日更萬(wàn)日,讓更多人享受智能樂(lè)趣」
時(shí)間拉回 2019 年,有「計(jì)算機(jī)界諾貝爾獎(jiǎng)」之稱圖靈獎(jiǎng)獲得者公布,深度學(xué)習(xí)三巨頭:Yoshua Bengio、Geoffrey Hinton、Yann LeCun 眾望所歸。
圖靈獎(jiǎng)為何不頒給LSTM之父Jürgen Schmidhuber?作為AI界特立獨(dú)行的人,Schmidhuber與深度學(xué)習(xí)三巨頭有過(guò)口水戰(zhàn),并現(xiàn)場(chǎng)對(duì)質(zhì)GAN的提出者,可謂得罪了一圈人。
20 世紀(jì) 90 年代,長(zhǎng)短時(shí)記憶(LSTM)方法引入了恒定誤差選擇輪盤和門控的核心思想。三十多年來(lái),LSTM 經(jīng)受住了時(shí)間的考驗(yàn),并為眾多深度學(xué)習(xí)的成功案例做出了貢獻(xiàn)。然而,以可并行自注意力為核心 Transformer 橫空出世之后,LSTM 自身所存在的局限性使其風(fēng)光不再。
當(dāng)人們都以為 Transformer 在語(yǔ)言模型領(lǐng)域穩(wěn)坐江山的時(shí)候,LSTM 又殺回來(lái)了 —— 這次,是以 xLSTM 的身份。
5 月 8 日,LSTM 提出者和奠基者 Sepp Hochreiter 在 arXiv 上傳了 xLSTM 的預(yù)印本論文。
LSTM:「這次重生,我要奪回 Transformer 拿走的一切! 今天,我們就來(lái) 說(shuō)說(shuō) 前任 - LSTM
(by Michael Phi)
各位[大俠],歡迎來(lái)到 LSTM 的世界。LSTM,全稱 Long Short-Term Memory,是一種特殊的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN),旨在解決 RNN 中的長(zhǎng)期依賴問(wèn)題。它在時(shí)間序列預(yù)測(cè)、自然語(yǔ)言處理等領(lǐng)域有著廣泛的應(yīng)用。接下去我們從以下幾個(gè)方面展開:
LSTM 是一種改進(jìn)的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN),專門用于解決傳統(tǒng) RNN 中的長(zhǎng)期依賴問(wèn)題。RNN 在處理序列數(shù)據(jù)時(shí),能夠利用前面的信息,但是當(dāng)序列過(guò)長(zhǎng)時(shí),信息會(huì)逐漸丟失。而 LSTM 通過(guò)引入記憶單元(Memory Cell)和門控機(jī)制(Gate Mechanisms),有效地解決了這一問(wèn)題。
LSTM 在許多領(lǐng)域有廣泛的應(yīng)用,包括但不限于:
LSTM 的設(shè)計(jì)使其能夠有效地捕捉和利用長(zhǎng)期依賴關(guān)系,顯著提高了序列數(shù)據(jù)處理的性能和效果。
接下來(lái)我們看一下 LSTM 的數(shù)學(xué)表達(dá)式。LSTM 包含三個(gè)門:輸入門、遺忘門和輸出門。每個(gè)門都有自己的權(quán)重和偏置,用于控制信息的流動(dòng)。
讓我們通過(guò)一個(gè)圖示來(lái)直觀地理解 LSTM 的工作原理。下圖展示了 LSTM 單元的內(nèi)部結(jié)構(gòu):
在圖中可以看到,輸入門、遺忘門和輸出門共同作用于記憶單元,控制信息的存儲(chǔ)和傳遞。
通過(guò)這種門控機(jī)制,LSTM 能夠有效地記住長(zhǎng)時(shí)間跨度的信息,從而在處理序列數(shù)據(jù)時(shí)表現(xiàn)出色。
現(xiàn)在我們來(lái)看看如何在 Python 中實(shí)現(xiàn) LSTM。我們將使用 Keras 這個(gè)高層次神經(jīng)網(wǎng)絡(luò)庫(kù)來(lái)進(jìn)行實(shí)現(xiàn)。首先,我們需要準(zhǔn)備數(shù)據(jù)集,這里我們自己造一個(gè)結(jié)合武俠元素的數(shù)據(jù)集。
import numpy as np
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import LSTM, Dense
from keras.preprocessing.sequence import pad_sequences
# 生成武俠元素的數(shù)據(jù)集
def generate_data(num_sequences, sequence_length):
data = []
for _ in range(num_sequences):
sequence = np.random.choice(['少林', '武當(dāng)', '峨眉', '華山', '昆侖'], size=sequence_length)
data.append(sequence)
return data
# 將文本數(shù)據(jù)轉(zhuǎn)換為數(shù)字
def text_to_numeric(data):
mapping = {'少林': 0, '武當(dāng)': 1, '峨眉': 2, '華山': 3, '昆侖': 4}
numeric_data = []
for sequence in data:
numeric_data.append([mapping[item] for item in sequence])
return numeric_data
# 數(shù)據(jù)集生成
data = generate_data(1000, 10)
numeric_data = text_to_numeric(data)
# 填充序列
X = pad_sequences(numeric_data, maxlen=10)
y = np.random.rand(1000, 1) # 隨機(jī)生成一些標(biāo)簽
# 構(gòu)建 LSTM 模型
model = Sequential()
model.add(LSTM(50, input_shape=(10, 1)))
model.add(Dense(1))
model.compile(loss='mse', optimizer='adam')
# 訓(xùn)練模型
model.fit(X, y, epochs=10, batch_size=32)
# 可視化訓(xùn)練結(jié)果
loss = model.history.history['loss']
plt.plot(loss)
plt.title('Model Loss')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.show()
在基礎(chǔ)實(shí)現(xiàn)的基礎(chǔ)上,我們可以進(jìn)一步優(yōu)化 LSTM 模型,例如增加層數(shù)、調(diào)整超參數(shù)等。
推薦閱讀往期文章:
詳解過(guò)擬合和欠擬合!
機(jī)器學(xué)習(xí) 10 大最優(yōu)化算法全面總結(jié)
在這一部分,我們將展示如何使用 LSTM 進(jìn)行文本生成。我們將繼續(xù)使用武俠元素的數(shù)據(jù)集,通過(guò)訓(xùn)練 LSTM 來(lái)生成類似風(fēng)格的文本。
import numpy as np
from keras.models import Sequential
from keras.layers import LSTM, Dense, Embedding
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
# 生成武俠文本數(shù)據(jù)集
texts = [
"少林武當(dāng)峨眉華山昆侖",
"武當(dāng)少林昆侖華山峨眉",
"峨眉少林華山昆侖武當(dāng)",
"昆侖峨眉少林武當(dāng)華山",
"華山昆侖峨眉少林武當(dāng)"
]
# 創(chuàng)建文本 Tokenizer
tokenizer = Tokenizer(char_level=True)
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
vocab_size = len(tokenizer.word_index) + 1
# 準(zhǔn)備數(shù)據(jù)
X, y = [], []
for sequence in sequences:
for i in range(1, len(sequence)):
X.append(sequence[:i])
y.append(sequence[i])
X = pad_sequences(X, maxlen=10)
y = np.array(y)
# 構(gòu)建 LSTM 模型
model = Sequential()
model.add(Embedding(vocab_size, 50, input_length=10))
model.add(LSTM(100))
model.add(Dense(vocab_size, activation='softmax'))
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam')
# 訓(xùn)練模型
model.fit(X, y, epochs=200, verbose=2)
# 文本生成函數(shù)
def generate_text(model, tokenizer, seed_text, n_chars):
result = seed_text
for _ in range(n_chars):
encoded = tokenizer.texts_to_sequences([seed_text])[0]
encoded = pad_sequences([encoded], maxlen=10, truncating='pre')
predicted = np.argmax(model.predict(encoded), axis=-1)
out_char = tokenizer.index_word[predicted[0]]
seed_text += out_char
result += out_char
return result
# 生成新文本
seed_text = "少林"
generated_text = generate_text(model, tokenizer, seed_text, 20)
print(generated_text)
在這個(gè)示例中,我們生成了一些武俠風(fēng)格的文本。通過(guò)訓(xùn)練 LSTM 模型,我們可以生成類似風(fēng)格的新文本,展示了 LSTM 在自然語(yǔ)言處理中的能力。
在本例中,我們將使用 LSTM 進(jìn)行時(shí)間序列預(yù)測(cè),例如預(yù)測(cè)未來(lái)的天氣狀況。我們會(huì)先創(chuàng)建一個(gè)模擬的時(shí)間序列數(shù)據(jù)集,然后訓(xùn)練 LSTM 模型進(jìn)行預(yù)測(cè)。
import numpy as np
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import LSTM, Dense
# 生成模擬時(shí)間序列數(shù)據(jù)
np.random.seed(7)
data = np.sin(np.linspace(0, 50, 500)) + np.random.normal(0, 0.1, 500)
sequence_length = 10
# 準(zhǔn)備數(shù)據(jù)
X = []
y = []
for i in range(len(data) - sequence_length):
X.append(data[i:i+sequence_length])
y.append(data[i+sequence_length])
X = np.array(X)
y = np.array(y)
# 調(diào)整數(shù)據(jù)形狀
X = np.reshape(X, (X.shape[0], X.shape[1], 1))
# 構(gòu)建 LSTM 模型
model = Sequential()
model.add(LSTM(50, input_shape=(sequence_length, 1)))
model.add(Dense(1))
model.compile(loss='mse', optimizer='adam')
# 訓(xùn)練模型
model.fit(X, y, epochs=20, batch_size=32, verbose=2)
# 預(yù)測(cè)結(jié)果
predicted = model.predict(X)
# 可視化結(jié)果
plt.plot(data, label='真實(shí)數(shù)據(jù)')
plt.plot(np.arange(sequence_length, sequence_length + len(predicted)), predicted, label='預(yù)測(cè)數(shù)據(jù)')
plt.legend()
plt.show()
在這個(gè)例子中,我們使用 LSTM 模型預(yù)測(cè)未來(lái)的時(shí)間序列值?梢钥吹,通過(guò)訓(xùn)練 LSTM 模型,我們可以較為準(zhǔn)確地預(yù)測(cè)未來(lái)的值。
在本文中,我們?cè)敿?xì)探討了 LSTM 的定義、基本概念、核心原理、實(shí)現(xiàn)方法以及實(shí)際應(yīng)用案例。
- 科研為國(guó)分憂,創(chuàng)新與民造福 -
日更時(shí)間緊任務(wù)急,難免有疏漏之處,還請(qǐng)大俠海涵 內(nèi)容僅供學(xué)習(xí)交流之用,部分素材來(lái)自網(wǎng)絡(luò),侵聯(lián)刪
如過(guò)覺(jué)得內(nèi)容有價(jià)值,煩請(qǐng)大俠多多 分享、在看、點(diǎn)贊,助力算法金又猛又持久、很黃很 BL 的日更下去;
同時(shí)邀請(qǐng)大俠 關(guān)注、星標(biāo) 算法金,圍觀日更萬(wàn)日,助你功力大增、笑傲江湖
機(jī)器學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)構(gòu)建(下)
閱讀華為Mate品牌盛典:HarmonyOS NEXT加持下游戲性能得到充分釋放
閱讀實(shí)現(xiàn)對(duì)象集合與DataTable的相互轉(zhuǎn)換
閱讀鴻蒙NEXT元服務(wù):論如何免費(fèi)快速上架作品
閱讀算法與數(shù)據(jù)結(jié)構(gòu) 1 - 模擬
閱讀5. Spring Cloud OpenFeign 聲明式 WebService 客戶端的超詳細(xì)使用
閱讀Java代理模式:靜態(tài)代理和動(dòng)態(tài)代理的對(duì)比分析
閱讀Win11筆記本“自動(dòng)管理應(yīng)用的顏色”顯示規(guī)則
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]
湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)