成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

遷移學習:數據不足時如何深度學習

人工智能 深度學習 移動開發
最近深度學習技術突然開始大肆流行,并在語言翻譯、玩策略游戲,以及無人駕駛汽車等涉及到數百萬數據量的領域取得了醒目的成果。使用深度學習技術解決問題的過程中,最常見的障礙在于訓練模型過程中所需的海量數據。需要如此多的數據,原因在于機器在學習的過程中會在模型中遇到大量參數。

[[191502]]

使用深度學習技術解決問題的過程中,最常見的障礙在于訓練模型過程中所需的海量數據。需要如此多的數據,原因在于機器在學習的過程中會在模型中遇到大量參數。在面對某一領域的具體問題時,通??赡軣o法得到構建模型所需規模的數據。然而在一個模型訓練任務中針對某種類型數據獲得的關系也可以輕松地應用于同一領域的不同問題,這就是所謂的遷移學習。

我認為實現人工智能的難度無異于建造火箭。需要有一個強大的引擎,還有大量的燃料。如果空有強大的引擎但缺乏燃料,火箭肯定是無法上天的。如果只有一個單薄的引擎,有再多燃料也無法起飛。如果要造火箭,強大的引擎和大量燃料是必不可少的。以此來類比深度學習的話,深度學習引擎可以看作火箭引擎,而我們為算法提供的海量數據可以看作是燃料。             — Andrew Ng

最近深度學習技術突然開始大肆流行,并在語言翻譯、玩策略游戲,以及無人駕駛汽車等涉及到數百萬數據量的領域取得了醒目的成果。使用深度學習技術解決問題的過程中,最常見的障礙在于訓練模型過程中所需的海量數據。需要如此多的數據,原因在于機器在學習的過程中會在模型中遇到大量參數。

例如這些模型中常見的參數數量范圍包括:

深度學習

神經網絡(即深度學習)是一種分層式結構,但又能堆疊在一起(就像樂高積木)。

深度學習技術其實就是一種大規模神經網絡,我們可以將這種網絡看作一種流程圖,數據從一端進入,相互引用/了解后從另一端輸出。我們還可以將神經網絡拆分成多個部分,從任何一部分中得到自己需要的推理結果。也許無法得到有意義的結果,但依然可以這樣做,例如Google DeepDream就是這樣做的。

規模(模型) ∝ 規模(數據) ∝ 復雜度(問題)

在模型的規模和所需數據量的規模之間存在一種有趣的近似于線性的關系。基本推論在于,對于特定的問題(例如類別的數量),模型必須足夠大,以便得到數據之間的關系(例如圖片中的材質和形狀,文本中的語法,以及語音中的音素)。模型中的前序層可以識別所輸入內容中不同組成之間的高級別關系(例如邊緣和模式),后續層可以識別有助于最終做決策所需的信息,這些信息通常有助于區分不同的結果。因此如果問題的復雜度較高(例如圖像分類),所需的參數數量和數據量就會非常大。

AlexNet在每個環節“看到”的內容

遷移學習來了!

在面對某一領域的具體問題時,通常可能無法得到構建模型所需規模的數據。然而在一個模型訓練任務中針對某種類型數據獲得的關系也可以輕松地應用于同一領域的不同問題。這種技術也叫做遷移學習(Transfer Learning)。

Qiang Yang、Sinno Jialin Pan,“A Survey on Transfer Learning”,IEEE Transactions on Knowledge & Data Engineering,vol. 22, no. , pp. 1345–1359, October 2010, doi:10.1109/TKDE.2009.191

遷移學習就像是一個沒人愿意保守的***機密。盡管業內人人皆知,但外界毫不知情。

谷歌搜索中,機器學習、深度學習,以及遷移學習三個關鍵字的搜索趨勢變化

根據Awesome — Most Cited Deep Learning Papers所公布的深度學習領域最主要的論文統計,超過50%的論文使用了某種形式的遷移學習或預訓練。對于資源(數據和計算能力)有限的人,遷移學習技術的重要性與日俱增,然而這一概念尚未得到應有程度的社會影響。最需要這種技術的人甚至至今都不知道這種技術的存在。

如果深度學習是圣杯,數據是守門人,那么遷移學習就是大門鑰匙。

借助遷移學習技術,我們可以直接使用預訓練過的模型,這種模型已經通過大量容易獲得的數據集進行過訓練(雖然是針對完全不同的任務進行訓練的,但輸入的內容完全相同,只不過輸出的結果不同)。隨后從中找出輸出結果可重用的層。我們可以使用這些層的輸出結果充當輸入,進而訓練出一個所需參數的數量更少,規模也更小的網絡。這個小規模網絡只需要了解特定問題的內部關系,同時已經通過預培訓模型學習過數據中蘊含的模式。通過這種方式,即可將經過訓練檢測貓咪的模型重新用于再現梵高的畫作。

遷移學習技術的另一個重大收益在于可以對模型進行完善的“通用化”。大型模型往往會與數據過度擬合(Overfit),例如建模所用數據量遠遠超過隱含的現象數量,在處理未曾見過的數據時效果可能不如測試時那么好。由于遷移學習可以讓模型看到不同類型的數據,因此可以習得更出色的底層規則。

過度擬合,更像是學習過程中的死記硬背。 — James Faghmous

遷移學習可減小數據量

假設想要終結裙子到底是藍黑色還是白金色的爭議,首先需要收集大量已獲證實是藍黑色和白金色的裙子圖片。如果要使用類似上文提到的方式(包含1.4億個參數!)自行構建一個準確的模型并對其進行訓練,至少需要準備120萬張圖片,這基本上是無法實現的。這時候可以試試遷移學習。

如果使用遷移學習技術,訓練所需的參數數量計算方式如下:

參數的數量 = [規模(輸入) + 1] * [規模(輸出) + 1]= [2048+1]*[1+1]~ 4098 個參數

所需參數數量由1.4*10⁸個減少至4*10⊃3;個,降低了五個數量級!只要收集不到100個圖片就夠了。松了口氣!

如果實在沒耐心繼續閱讀,希望立刻知道裙子的顏色,可以直接跳至本文末尾看看如何自行構建一個這樣的模型。

遷移學習循序漸進指南 — 使用示例進行情緒分析

在這個示例中共有72篇影評。

62篇不包含明確的情緒,將用于對模型進行預訓練

8篇包含明確的情緒,將用于對模型進行訓練

2篇包含明確的情緒,將用于對模型進行測試

由于只有8個包含標簽的句子(包含明確情緒的句子),因此首先可以預訓練模型進行上下文預測。如果只使用這8個句子訓練模型,準確度可達50%(這樣的準確度和拋硬幣差不多)。

我們將使用遷移學習技術解決這個問題,首先使用62個句子訓練模型,隨后使用***個模型的部分內容,以此為基礎訓練出一個情緒分類器。使用隨后8個句子進行訓練后,用***2個句子測試得到了100%的精確度。

第1步

我們將訓練一個對詞語之間的關系進行建模的網絡。將句子中包含的一個詞語傳遞進去,并嘗試預測該詞語出現在同一個句子中。在下列代碼中嵌入的矩陣其大小為vocabulary x embedding_size,其中存儲了代表每個詞語的向量(這里的大小為“4”)。

graph = tf.Graph()with graph.as_default(): train_inputs = tf.placeholder(tf.int32, shape=[batch_size]) train_labels = tf.placeholder(tf.int32, shape=[batch_size, 1]) valid_dataset = tf.constant(valid_examples, dtype=tf.int32) with tf.device(‘/cpu:0’): embeddings = tf.Variable(tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0)) embed = tf.nn.embedding_lookup(embeddings, train_inputs) nce_weights = tf.Variable(tf.truncated_normal([vocabulary_size, embedding_size], stddev=1.0 / math.sqrt(embedding_size))) nce_biases = tf.Variable(tf.zeros([vocabulary_size])) loss = tf.reduce_mean(tf.nn.nce_loss(nce_weights, nce_biases, embed, train_labels, num_sampled, vocabulary_size)) optimizer = tf.train.GradientDescentOptimizer(1.0).minimize(loss) norm = tf.sqrt(tf.reduce_sum(tf.square(embeddings), 1, keep_dims=True)) normalized_embeddings = embeddings / norm valid_embeddings = tf.nn.embedding_lookup(normalized_embeddings, valid_dataset) similarity = tf.matmul(valid_embeddings, normalized_embeddings, transpose_b=True) init = tf.global_variables_initializer()

pretraining_model.py托管于GitHub,可查看源文件

第2步

我們繼續對這個圖表進行訓練,讓相同上下文中出現的詞語可以獲得類似的向量表征。我們會對這些句子進行預處理,移除所有停用詞(Stop word)并實現標記化(Tokenizing)。隨后一次傳遞一個詞語,盡量縮短該詞語向量與周邊詞語之間的距離,并擴大與上下文不包含的隨機詞語之間的距離。

with tf.Session(graph=graph) as session: init.run() average_loss = 0 for step in range(10001): batch_inputs, batch_labels = generate_batch(batch_size, num_skips, skip_window) feed_dict = {train_inputs: batch_inputs, train_labels: batch_labels} _, loss_val, normalized_embeddings_np = session.run([optimizer, loss, normalized_embeddings], feed_dict=feed_dict) average_loss += loss_val final_embeddings = normalized_embeddings.eval()

training_the_pretrained_model.py托管于GitHub,可查看源文件

第3步

隨后我們會試著預測句子的情緒。目前已經有10個(8個訓練用,2個測試用)句子帶有正面和負面的標簽。由于上一步得到的模型已經包含從所有詞語中習得的向量,并且這些向量的數值屬性可以代表詞語的上下文,借此可進一步簡化情緒的預測。

此時我們并不直接使用句子,而是將句子的向量設置為所含全部詞語的平均值(這一任務實際上是通過類似LSTM的技術實現的)。句子向量將作為輸入傳遞到網絡中,輸出結果為內容為正面或負面的分數。我們用到了一個隱藏的中間層,并通過帶有標簽的句子對模型進行訓練。如你所見,雖然每次只是用了10個樣本,但這個模型實現了100%的準確度。

input = tf.placeholder(<span class="hljs-string"><span class="hljs-string">"float"</span></span>, shape=[<span class="hljs-keyword">None</span>, x_size])
y = tf.placeholder(<span class="hljs-string"><span class="hljs-string">"float"</span></span>, shape=[<span class="hljs-keyword">None</span>, y_size])
w_1 = tf.Variable(tf.random_normal((x_size, h_size), stddev=<span class="hljs-number"><span class="hljs-number">0.1</span></span>))
w_2 = tf.Variable(tf.random_normal((h_size, y_size), stddev=<span class="hljs-number"><span class="hljs-number">0.1</span></span>))
h = tf.nn.sigmoid(tf.matmul(X, w_1))yhat = tf.matmul(h, w_2)predict = tf.argmax(yhat, dimension=<span class="hljs-number"><span class="hljs-number">1</span></span>)cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(yhat, y))updates = tf.train.GradientDescentOptimizer(<span class="hljs-number"><span class="hljs-number">0.01</span></span>).minimize(cost)sess = tf.InteractiveSession()init = tf.initialize_all_variables()sess.run(init)<span class="hljs-keyword"><span class="hljs-keyword">for</span></span> epoch <span class="hljs-keyword"><span class="hljs-keyword">in</span></span> range(<span class="hljs-number"><span class="hljs-number">1000</span></span>): <span class="hljs-keyword"><span class="hljs-keyword">for</span></span> i <span class="hljs-keyword"><span class="hljs-keyword">in</span></span> range(len(train_X)): sess.run(updates, feed_dict={<span class="hljs-string">X:</span> train_X[<span class="hljs-string">i:</span> i + <span class="hljs-number"><span class="hljs-number">1</span></span>], <span class="hljs-string">y:</span> train_y[<span class="hljs-string">i:</span> i + <span class="hljs-number"><span class="hljs-number">1</span></span>]}) train_accuracy = numpy.mean(numpy.argmax(train_y, axis=<span class="hljs-number"><span class="hljs-number">1</span></span>) == sess.run(predict, feed_dict={<span class="hljs-string">X:</span> train_X, <span class="hljs-string">y:</span> train_y})) test_accuracy = numpy.mean(numpy.argmax(test_y, axis=<span class="hljs-number"><span class="hljs-number">1</span></span>) == sess.run(predict, feed_dict={<span class="hljs-string">X:</span> test_X, <span class="hljs-string">y:</span> test_y})) print(<span class="hljs-string"><span class="hljs-string">"Epoch = %d, train accuracy=%.2f%%, test accuracy=%.2f%%"</span></span> % (epoch+<span class="hljs-number"><span class="hljs-number">1</span></span>,<span class="hljs-number"><span class="hljs-number">100.</span></span>*train_accuracy,<span class="hljs-number"><span class="hljs-number">100.</span></span>* test_accuracy))

training_the_sentiment_model.py托管于GitHub,查看源文件

雖然這只是個示例,但可以發現在遷移學習技術的幫助下,精確度從50%飛速提升至100%。若要查看完整范例和代碼請訪問下列地址:

https://gist.github.com/prats226/9fffe8ba08e378e3d027610921c51a78

遷移學習的一些真實案例

#### 圖像識別:

圖像增強

[[191503]]

風格轉移

對象檢測

皮膚癌檢測

[[191504]]

#### 文字識別:

Zero Shot翻譯

情緒分類

遷移學習實現過程中的難點

雖然可以用更少量的數據訓練模型,但該技術的運用有著更高的技能要求。只需要看看上述例子中硬編碼參數的數量,并設想一下要在模型訓練完成前不斷調整這些參數,遷移學習技術使用的難度之大可想而知。

遷移學習技術目前面臨的問題包括:

找到預訓練所需的大規模數據集

決定用來預訓練的模型

兩種模型中任何一種無法按照預期工作都將比較難以調試

不確定為了訓練模型還需要額外準備多少數據

使用預訓練模型時難以決定在哪里停止

在預訓練模型的基礎上,確定模型所需層和參數的數量

托管并提供組合后的模型

當出現更多數據或更好的技術后,對預訓練模型進行更新

數據科學家難覓。找到能發現數據科學家的人其實一樣困難。 — Krzysztof Zawadzki

NanoNets讓遷移學習變得更簡單

親身經歷過這些問題后,我們開始著手通過構建支持遷移學習技術的云端深度學習服務,并嘗試通過這種簡單易用的服務解決這些問題。該服務中包含一系列預訓練的模型,我們已針對數百萬個參數進行過訓練。你只需要上傳自己的數據(或在網絡上搜索數據),該服務即可針對你的具體任務選擇最適合的模型,在現有預訓練模型的基礎上建立新的NanoNet,將你的數據輸入到NanoNet中進行處理。

Nanonet對程序員是免費的,可以用來學習和看看效果。

NanoNets的遷移學習技術(該架構僅為基本呈現)

構建NanoNet(圖像分類)

1.在這里選擇你要處理的分類。

2.一鍵點擊開始搜索網絡并構建模型(你也可以上傳自己的圖片)。

3.解決藍金裙子的爭議(模型就緒后我們會通過簡單易用的Web界面讓你上傳測試圖片,同時還提供了不依賴特定語言的API)。

若要開始構建你的***個NanoNet,可訪問:www.nanonets.ai。

原文作者:Sarthak Jain,點擊“閱讀原文”查看英文鏈接。

責任編輯:林師授 來源: 數盟
相關推薦

2021-11-12 15:16:32

深度學習數據合成人工智能

2018-03-26 20:12:42

深度學習

2020-03-02 17:03:32

深度學習人工智能機器學習

2022-07-15 10:37:22

AI研究數據

2017-02-08 17:29:17

遷移大數據深度學習

2023-01-09 08:00:00

遷移學習機器學習數據集

2020-10-16 14:59:32

機器學習人工智能神經網絡

2024-09-13 15:24:20

深度學習自動微分

2021-03-08 11:28:59

人工智能深度學習Python

2020-07-15 15:01:28

遷移學習深度學習模型

2025-03-03 01:50:00

深度學習微調遷移學習

2020-12-16 15:56:26

機器學習人工智能Python

2017-12-06 15:46:31

深度學習結構化數據NLP

2016-12-27 14:06:36

Python代碼基礎

2020-11-04 07:10:42

深度學習DJL 語言

2023-08-17 14:22:17

深度學習機器學習

2017-08-03 11:00:20

2018-05-07 14:38:23

數據機器學習人工智能

2017-03-18 16:28:40

人工智能機器學習深度學習

2018-05-07 14:32:28

人工智能深度學習數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美综合精品久久成人 | av在线一区二区三区 | 最新中文字幕在线 | 91精品国产综合久久久动漫日韩 | 性一交一乱一伦视频免费观看 | 精品一区二区在线观看 | 国产三级一区二区 | 一区二区三区久久 | 91九色在线观看 | 国产欧美精品一区二区色综合朱莉 | 97精品超碰一区二区三区 | 国产精品中文字幕一区二区三区 | 日韩精品在线一区 | 黄久久久| 亚洲精品亚洲人成人网 | 在线四虎 | 久久久综合精品 | 免费观看黄色一级片 | 成人免费激情视频 | 欧美一级在线观看 | 日屁网站 | 成人久久18免费网站 | 久久久2o19精品 | 久久亚洲免费 | 蜜月va乱码一区二区三区 | 午夜免费影视 | 欧美日韩福利 | 日本成人综合 | 精品综合久久久 | 欧美一二三 | 97精品超碰一区二区三区 | 在线午夜电影 | 在线观看久草 | 国产成人免费在线观看 | av网站免费在线观看 | 99精品视频一区二区三区 | 手机看片1 | 国产欧美一级二级三级在线视频 | 久久久久国产一区二区 | 久久99精品国产 | 九色在线观看 |