深度學(xué)習(xí) 實(shí)驗(yàn)指導(dǎo)書 實(shí)驗(yàn)7:神經(jīng)網(wǎng)絡(luò)語言模型實(shí)驗(yàn)指導(dǎo)書_第1頁
深度學(xué)習(xí) 實(shí)驗(yàn)指導(dǎo)書 實(shí)驗(yàn)7:神經(jīng)網(wǎng)絡(luò)語言模型實(shí)驗(yàn)指導(dǎo)書_第2頁
深度學(xué)習(xí) 實(shí)驗(yàn)指導(dǎo)書 實(shí)驗(yàn)7:神經(jīng)網(wǎng)絡(luò)語言模型實(shí)驗(yàn)指導(dǎo)書_第3頁
深度學(xué)習(xí) 實(shí)驗(yàn)指導(dǎo)書 實(shí)驗(yàn)7:神經(jīng)網(wǎng)絡(luò)語言模型實(shí)驗(yàn)指導(dǎo)書_第4頁
深度學(xué)習(xí) 實(shí)驗(yàn)指導(dǎo)書 實(shí)驗(yàn)7:神經(jīng)網(wǎng)絡(luò)語言模型實(shí)驗(yàn)指導(dǎo)書_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

深度學(xué)習(xí)實(shí)驗(yàn)指導(dǎo)書實(shí)驗(yàn)7神經(jīng)網(wǎng)絡(luò)語言模型實(shí)驗(yàn)指導(dǎo)書實(shí)驗(yàn)7神經(jīng)網(wǎng)絡(luò)語言模型實(shí)驗(yàn)指導(dǎo)書實(shí)驗(yàn)?zāi)康恼莆昭h(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),包括LSTM等。掌握使用深度學(xué)習(xí)框架構(gòu)建循環(huán)神經(jīng)網(wǎng)絡(luò)模型的方法。實(shí)驗(yàn)要求使用深度學(xué)習(xí)框架(本實(shí)驗(yàn)指導(dǎo)書以TensorFlow為例)構(gòu)建一個(gè)規(guī)范的LSTM網(wǎng)絡(luò)。在PTB(PennTreebank)語料庫上進(jìn)行神經(jīng)網(wǎng)絡(luò)語言模型的訓(xùn)練和評估,評價(jià)指標(biāo)困惑度(Perplexity,PPL)低于80。如果選擇做此實(shí)驗(yàn)作業(yè),按規(guī)定時(shí)間在課程網(wǎng)站提交實(shí)驗(yàn)報(bào)告、代碼以及PPT。實(shí)驗(yàn)原理語言模型語言模型是一個(gè)為某一段詞序列分配概率的模型。它對多種自然語言處理任務(wù)都有幫助。例如,在機(jī)器翻譯任務(wù)中,需要由語言模型為系統(tǒng)輸出打分,以提高輸出目標(biāo)語言輸出的流暢性。在語音識別任務(wù)中,語言模型與聲學(xué)模型一起預(yù)測下一個(gè)詞。語言模型用來計(jì)算一個(gè)具有N個(gè)詞的詞序列概率,即:上式可知,它也可以分解成對給定前綴(一般叫做上下文)的下一詞出現(xiàn)概率的乘積。神經(jīng)語言模型就是用于估計(jì)每一個(gè)詞出現(xiàn)的條件概率的。循環(huán)神經(jīng)網(wǎng)絡(luò)循環(huán)神經(jīng)網(wǎng)絡(luò)對序列數(shù)據(jù)的處理有先天優(yōu)勢,它的結(jié)構(gòu)使網(wǎng)絡(luò)可以接受變長輸入,當(dāng)網(wǎng)絡(luò)輸入窗口被移位時(shí),不需要重復(fù)計(jì)算。其網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。我們關(guān)注某一時(shí)刻τ的損失,它就等于此時(shí)刻之前所有時(shí)間步的損失之和。例如,對于時(shí)間τ時(shí)刻的損失LτL這種在時(shí)間步上展開進(jìn)行反向傳播的算法,稱為基于時(shí)間的反向傳播(Back-PropagationThroughTime,BPTT)。循環(huán)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練就是通過BPTT算法進(jìn)行的。圖1循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)結(jié)構(gòu)下面以圖1為例,我們將通過BPTT算法來計(jì)算RNN的參數(shù)梯度。對于每一個(gè)節(jié)點(diǎn)N,我們需要基于N后面的節(jié)點(diǎn)的梯度,遞歸地計(jì)算梯度?N?L對于時(shí)間步t輸出的梯度?o(t)L的第?從序列的最后時(shí)間步τ開始反向計(jì)算梯度。對于最后時(shí)間步τ,h(τ)只由o?根據(jù)這個(gè)梯度我們就可以依次計(jì)算時(shí)間步τ-1到時(shí)間步1的隱層節(jié)點(diǎn)的梯度。由于ht(t<τ)是同時(shí)有ot和ht+1兩個(gè)?=在得到了隱層節(jié)點(diǎn)的梯度后,我們就可以計(jì)算對于參數(shù)的梯度:?????其中,W(t)、U(t)、b(t)表示時(shí)刻t時(shí),W、U、b的副本,則?W(t)表示時(shí)刻t長短期記憶網(wǎng)絡(luò)(LSTM)是一種具有門結(jié)構(gòu)的特殊循環(huán)神經(jīng)網(wǎng)絡(luò)。它是為了應(yīng)對長期依賴的挑戰(zhàn)而提出的。LSTM網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。圖2LSTM網(wǎng)絡(luò)結(jié)構(gòu)LSTM引入了“門”機(jī)制對細(xì)胞狀態(tài)信息進(jìn)行添加或刪除,由此實(shí)現(xiàn)長程記憶?!伴T”機(jī)制由一個(gè)Sigmoid激活函數(shù)層和一個(gè)向量點(diǎn)乘操作組成,Sigmoid層的輸出控制了信息傳遞的比例。每個(gè)LSTM基本單元包含遺忘門、輸入門和輸出門三個(gè)門結(jié)構(gòu)。1)遺忘門LSTM通過遺忘門(forgetgate)實(shí)現(xiàn)對細(xì)胞狀態(tài)信息遺忘程度的控制,輸出當(dāng)前狀態(tài)的遺忘權(quán)重,取決于yt-1f2)輸入門LSTM通過輸入門(inputgate)實(shí)現(xiàn)對細(xì)胞狀態(tài)輸入接收程度的控制,輸出當(dāng)前輸入信息的接受權(quán)重,取決于yt-1i3)輸出門LSTM通過輸出門(outputgate)實(shí)現(xiàn)對細(xì)胞狀態(tài)輸出認(rèn)可程度的控制,輸出當(dāng)前輸出信息的認(rèn)可權(quán)重,取決于yt-1o4)狀態(tài)更新CCy實(shí)驗(yàn)所用工具及數(shù)據(jù)集工具Anaconda、TensorFlow(Tensorflow安裝教程參考:Tensorflow官網(wǎng)、Tensorflow中文社區(qū)、/tensorflow/tensorflow)數(shù)據(jù)集PennTreebank(PTB)語料庫(下載地址:http://www.fit.vutbr.cz/~imikolov/rnnlm/simple-examples.tgz)實(shí)驗(yàn)步驟與方法下載語料庫數(shù)據(jù)來源于TomasMikolov網(wǎng)站上的PTB數(shù)據(jù)集。該數(shù)據(jù)集已經(jīng)預(yù)先處理過并且包含了全部的10000個(gè)不同的詞語,其中包括語句結(jié)束標(biāo)記符,以及標(biāo)記稀有詞語的特殊符號(<unk>)。加載及準(zhǔn)備數(shù)據(jù)#從文件讀入的語料庫數(shù)據(jù)上迭代生成訓(xùn)練、驗(yàn)證、訓(xùn)練數(shù)據(jù)集#其中raw_data是需要將詞轉(zhuǎn)換成詞序號,方便后續(xù)處理defptb_producer(raw_data,batch_size,num_steps,name=None):with_scope(name,"PTBProducer",[raw_data,batch_size,num_steps]):raw_data=tf.convert_to_tensor(raw_data,name="raw_data",dtype=32) #將數(shù)據(jù)進(jìn)行切分,去掉多余數(shù)據(jù)data_len=tf.size(raw_data)batch_len=data_len//batch_sizedata=tf.reshape(raw_data[0:batch_size*batch_len],[batch_size,batch_len])epoch_size=(batch_len-1)//num_stepsassertion=tf.assert_positive(epoch_size,message="epoch_size==0,decreasebatch_sizeornum_steps")withtf.control_dependencies([assertion]):epoch_size=tf.identity(epoch_size,name="epoch_size") #從數(shù)據(jù)中獲得批數(shù)據(jù)集i=tf.train.range_input_producer(epoch_size,shuffle=False).dequeue()x=tf.strided_slice(data,[0,i*num_steps],[batch_size,(i+1)*num_steps])x.set_shape([batch_size,num_steps])y=tf.strided_slice(data,[0,i*num_steps+1],[batch_size,(i+1)*num_steps+1])y.set_shape([batch_size,num_steps])returnx,y構(gòu)建計(jì)算圖(1)構(gòu)建LSTMwithtf.device("/cpu:0"):embedding=tf.get_variable( "embedding",[vocab_size,size],dtype=data_type())inputs=tf.nn.embedding_lookup(embedding,input_.input_data)#輸入數(shù)據(jù)接dropout層ifis_trainingandconfig.keep_prob<1:inputs=tf.nn.dropout(inputs,config.keep_prob)#為每個(gè)LSTM單元加上dropout層defmake_cell():cell=self._get_lstm_cell(config,is_training)ifis_trainingandconfig.keep_prob<1: cell=tf.contrib.rnn.DropoutWrapper( cell,output_keep_prob=config.keep_prob)returncellcell=tf.contrib.rnn.MultiRNNCell( [make_cell()for_inrange(config.num_layers)],state_is_tuple=True)#初始單元狀態(tài)為零狀態(tài)self._initial_state=cell.zero_state(config.batch_size,data_type())state=self._initial_state#構(gòu)建LSTM網(wǎng)絡(luò)outputs=[]withtf.variable_scope("RNN"):fortime_stepinrange(self.num_steps): #設(shè)置參數(shù)共享(重用) iftime_step>0:tf.get_variable_scope().reuse_variables() (cell_output,state)=cell(inputs[:,time_step,:],state) outputs.append(cell_output)output=tf.reshape(tf.concat(outputs,1),[-1,config.hidden_size])#softmax分類層softmax_w=tf.get_variable( "softmax_w",[size,vocab_size],dtype=data_type())softmax_b=tf.get_variable("softmax_b",[vocab_size],dtype=data_type())logits=tf.nn.xw_plus_b(output,softmax_w,softmax_b)#Reshapelogitstobea3-Dtensorforsequencelosslogits=tf.reshape(logits,[self.batch_size,self.num_steps,vocab_size])(2)訓(xùn)練與評估:#用在批上平均的序列損失求得損失loss=tf.contrib.seq2seq.sequence_loss( logits, input_.targets, tf.ones([self.batch_size,self.num_steps],dtype=data_type()), average_across_timesteps=False, average_across_batch=True)#每一時(shí)間步損失求和self._cost=tf.reduce_sum(loss)#求得梯度self._lr=tf.Variable(0.0,trainable=False)tvars=tf.trainable_variables()#使用全局梯度的范數(shù)進(jìn)行梯度截?cái)鄃rads,_=tf.clip_by_global_norm(tf.gradients(self._cost,tvars),config.max_grad_norm)optimizer=tf.train.GradientDescentOptimizer(self._lr)self._train_op=optimizer.apply_gradients(zip(grads,tvars),global_step=tf.train.get_or_create_global_step()) #更新學(xué)習(xí)率self._new_lr=tf.placeholder(tf.float32,shape=[],name="new_learning_rate")self._lr_update=tf.assign(self._lr,self._new_lr)創(chuàng)建會話,進(jìn)行模型的訓(xùn)練與評估#在批數(shù)據(jù)集上運(yùn)行模型defrun_epoch(session,model,eval_op=None,verbose=False):start_time=time.time()costs=0.0iters=0state=session.run(model.initial_state)fetches={"cost":model.cost,"final_state":model.final_state,}ifeval_opisnotNone:fetches["eval_op"]=eval_opforstepinrange(model.input.epoch_size):feed_dict={}fori,(c,h)inenumerate(model.initial_state):feed_dict[c]=state[i].cfeed_dict[h]=state[i].hvals=session.run(fetches,feed_dict)cost=vals["cost"]state=vals["final_state"]costs+=costiters+=model.input.num_stepsifverboseandstep%(model.input.epoch_size//10)==10:print("%.3fperplexity:%.3fspeed:%.0fwps"%(step*1.0/model.input.epoch_size,np.exp(costs/iters),iters*model.input.batch_size*max(1,FLAGS.num_gpus)/(time.time()-start_time)))returnnp.exp(costs/iters)、withtf.Graph().as_default():sv=tf.train.Supervisor(logdir=FLAGS.save_path)config_proto=tf.ConfigProto(allow_soft_placement=soft_placement)withsv.managed_session(config=config_proto)assession:foriinrange(config.max_max_epoch):lr_decay=config.lr_decay**max(i+1-config.max_epoch,0.0)m.assign_lr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論