欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么要有attention機(jī)制,Attention原理

電子工程師 ? 來源:lp ? 2019-03-06 14:11 ? 次閱讀

1.1 attention model

為什么要有attention機(jī)制

原本的Seq2seq模型只有一個(gè)encoder和一個(gè)decoder,通常的做法是將一個(gè)輸入的句子編碼成一個(gè)固定大小的state,然后作為decoder的初始狀態(tài)(當(dāng)然也可以作為每一時(shí)刻的輸入),但這樣的一個(gè)狀態(tài)對于decoder中的所有時(shí)刻都是一樣的。

attention即為注意力,人腦在對于的不同部分的注意力是不同的。需要attention的原因是非常直觀的,當(dāng)我們看一張照片時(shí),照片上有一個(gè)人,我們的注意力會集中在這個(gè)人身上,而它身邊的花草藍(lán)天,可能就不會得到太多的注意力。也就是說,普通的模型可以看成所有部分的attention都是一樣的,而這里的attention-based model對于不同的部分,重要的程度則不同,decoder中每一個(gè)時(shí)刻的狀態(tài)是不同的。

Attention-based Model是什么Attention-based Model其實(shí)就是一個(gè)相似性的度量,當(dāng)前的輸入與目標(biāo)狀態(tài)越相似,那么在當(dāng)前的輸入的權(quán)重就會越大,說明當(dāng)前的輸出越依賴于當(dāng)前的輸入。嚴(yán)格來說,Attention并算不上是一種新的model,而僅僅是在以往的模型中加入attention的思想,所以Attention-based Model或者Attention Mechanism是比較合理的叫法,而非Attention Model。

沒有attention機(jī)制的encoder-decoder結(jié)構(gòu)通常把encoder的最后一個(gè)狀態(tài)作為decoder的輸入(可能作為初始化,也可能作為每一時(shí)刻的輸入),但是encoder的state畢竟是有限的,存儲不了太多的信息,對于decoder過程,每一個(gè)步驟都和之前的輸入都沒有關(guān)系了,只與這個(gè)傳入的state有關(guān)。attention機(jī)制的引入之后,decoder根據(jù)時(shí)刻的不同,讓每一時(shí)刻的輸入都有所不同。

Attention原理

1.2 Beam Search介紹

在sequence2sequence模型中,beam search的方法只用在測試的情況,因?yàn)樵谟?xùn)練過程中,每一個(gè)decoder的輸出是有正確答案的,也就不需要beam search去加大輸出的準(zhǔn)確率。

假設(shè)現(xiàn)在我們用機(jī)器翻譯作為例子來說明,

我們需要翻譯中文“我是中國人”--->英文“I am Chinese”

假設(shè)我們的詞表大小只有三個(gè)單詞就是I am Chinese。那么如果我們的beam size為2的話,我們現(xiàn)在來解釋,如下圖所示,我們在decoder的過程中,有了beam search方法后,在第一次的輸出,我們選取概率最大的"I"和"am"兩個(gè)單詞,而不是只挑選一個(gè)概率最大的單詞。

然后接下來我們要做的就是,把“I”單詞作為下一個(gè)decoder的輸入算一遍得到y(tǒng)2的輸出概率分布,把“am”單詞作為下一個(gè)decoder的輸入算一遍也得到y(tǒng)2的輸出概率分布。

比如將“I”單詞作為下一個(gè)decoder的輸入算一遍得到y(tǒng)2的輸出概率分布如下:

比如將“am”單詞作為下一個(gè)decoder的輸入算一遍得到y(tǒng)2的輸出概率分布如下:

那么此時(shí)我們由于我們的beam size為2,也就是我們只能保留概率最大的兩個(gè)序列,此時(shí)我們可以計(jì)算所有的序列概率:

“I I” = 0.40.3 "I am" = 0.40.6 "I Chinese" = 0.4*0.1

"am I" = 0.50.3 "am am" = 0.50.3 "am Chinese" = 0.5*0.4

我們很容易得出倆個(gè)最大概率的序列為 “I am”和“am Chinese”,然后后面會不斷重復(fù)這個(gè)過程,直到遇到結(jié)束符為止。

最終輸出2個(gè)得分最高的序列。

這就是seq2seq中的beam search算法過程。

2.1 tf.app.flags

tf定義了tf.app.flags,用于支持接受命令行傳遞參數(shù),相當(dāng)于接受argv??聪旅娴睦樱?/p>

importtensorflowastf#第一個(gè)是參數(shù)名稱,第二個(gè)參數(shù)是默認(rèn)值,第三個(gè)是參數(shù)描述tf.app.flags.DEFINE_string('str_name','def_v_1',"descrip1")tf.app.flags.DEFINE_integer('int_name',10,"descript2")tf.app.flags.DEFINE_boolean('bool_name',False,"descript3")FLAGS=tf.app.flags.FLAGS#必須帶參數(shù),否則:'TypeError:main()takesnoarguments(1given)';main的參數(shù)名隨意定義,無要求defmain(_):print(FLAGS.str_name)print(FLAGS.int_name)print(FLAGS.bool_name)if__name__=='__main__':tf.app.run()#執(zhí)行main函數(shù)

使用命令行運(yùn)行得到的輸出為:

[root@AliHPC-G41-211test]#pythontt.pydef_v_110False[root@AliHPC-G41-211test]#pythontt.py--str_nametest_str--int_name99--bool_nameTruetest_str99True

2.2 tf.clip_by_global_norm

Gradient Clipping的直觀作用就是讓權(quán)重的更新限制在一個(gè)合適的范圍。tf.clip_by_global_norm函數(shù)的作用就是通過權(quán)重梯度的總和的比率來截取多個(gè)張量的值。使用方式如下:

tf.clip_by_global_norm(t_list,clip_norm,use_norm=None,name=None)

t_list 是梯度張量, clip_norm 是截取的比率, 這個(gè)函數(shù)返回截取過的梯度張量和一個(gè)所有張量的全局范數(shù)。

t_list[i] 的更新公式如下:

t_list[i]*clip_norm/max(global_norm,clip_norm)

其中g(shù)lobal_norm = sqrt(sum([l2norm(t)**2 for t in t_list]))global_norm 是所有梯度的平方和,如果 clip_norm > global_norm ,就不進(jìn)行截取。

2.3 tf中注意力機(jī)制的實(shí)現(xiàn)

注意力機(jī)制只在decoder中出現(xiàn),在之前作對聯(lián)的文章中,我們的decoder實(shí)現(xiàn)分三步走:定義decoder階段要是用的Cell -》TrainingHelper+BasicDecoder的組合定義解碼器-》調(diào)用dynamic_decode進(jìn)行解碼。

添加注意力機(jī)制主要是在第一步,對Cell進(jìn)行包裹,tf中實(shí)現(xiàn)了兩種主要的注意力機(jī)制,我們前文中所講的注意力機(jī)制我們成為Bahdanau注意力機(jī)制,還有一種注意力機(jī)制稱為Luong注意力機(jī)制,二者最主要的區(qū)別是前者為加法注意力機(jī)制,后者為乘法注意力機(jī)制。二者的更詳細(xì)的介紹參考播客:http://blog.csdn.net/amds123/article/details/65938986

那么我們就來詳細(xì)介紹一下 tf中注意力機(jī)制的實(shí)現(xiàn):

定義cell

def_create_rnn_cell(self):defsingle_rnn_cell():#創(chuàng)建單個(gè)cell,這里需要注意的是一定要使用一個(gè)single_rnn_cell的函數(shù),不然直接把cell放在MultiRNNCell#的列表中最終模型會發(fā)生錯(cuò)誤single_cell=tf.contrib.rnn.LSTMCell(self.rnn_size)#添加dropoutcell=tf.contrib.rnn.DropoutWrapper(single_cell,output_keep_prob=self.keep_prob_placeholder)returncell#列表中每個(gè)元素都是調(diào)用single_rnn_cell函數(shù)cell=tf.contrib.rnn.MultiRNNCell([single_rnn_cell()for_inrange(self.num_layers)])returncelldecoder_cell=self._create_rnn_cell()

封裝attention wrapper

attention_mechanism=tf.contrib.seq2seq.BahdanauAttention(num_units=self.rnn_size,memory=encoder_outputs,memory_sequence_length=encoder_inputs_length)#attention_mechanism=tf.contrib.seq2seq.LuongAttention(num_units=self.rnn_size,memory=encoder_outputs,memory_sequence_length=encoder_inputs_length)decoder_cell=tf.contrib.seq2seq.AttentionWrapper(cell=decoder_cell,attention_mechanism=attention_mechanism,attention_layer_size=self.rnn_size,name='Attention_Wrapper')

訓(xùn)練階段,使用TrainingHelper+BasicDecoder的組合

training_helper=tf.contrib.seq2seq.TrainingHelper(inputs=decoder_inputs_embedded, sequence_length=self.decoder_targets_length,time_major=False,name='training_helper')training_decoder=tf.contrib.seq2seq.BasicDecoder(cell=decoder_cell,helper=training_helper,initial_state=decoder_initial_state,output_layer=output_layer)

調(diào)用dynamic_decode進(jìn)行解碼

decoder_outputs,_,_=tf.contrib.seq2seq.dynamic_decode(decoder=training_decoder,impute_finished=True,maximum_iterations=self.max_target_sequence_length)

decoder_outputs是一個(gè)namedtuple,里面包含兩項(xiàng)(rnn_outputs, sample_id)rnn_output: [batch_size, decoder_targets_length, vocab_size],保存decode每個(gè)時(shí)刻每個(gè)單詞的概率,可以用來計(jì)算loss sample_id: [batch_size], tf.int32,保存最終的編碼結(jié)果??梢员硎咀詈蟮拇鸢浮?/p>

代碼目錄如下圖所示:

其中,data存放我們的數(shù)據(jù),model存放我們保存的訓(xùn)練模型,data_loader是我們處理數(shù)據(jù)的代碼,model是我們建立seq2seq模型的代碼,train是我們訓(xùn)練模型的代碼,predict是我們進(jìn)行模型預(yù)測的部分。這里我們只介紹model部分,其它部分的代碼大家可以參照github自己練習(xí)。

定義基本的輸入輸出

def__init__(self,rnn_size,num_layers,embedding_size,learning_rate,word_to_idx,mode,use_attention,beam_search,beam_size,max_gradient_norm=5.0):self.learing_rate=learning_rateself.embedding_size=embedding_sizeself.rnn_size=rnn_sizeself.num_layers=num_layersself.word_to_idx=word_to_idxself.vocab_size=len(self.word_to_idx)self.mode=modeself.use_attention=use_attentionself.beam_search=beam_searchself.beam_size=beam_sizeself.max_gradient_norm=max_gradient_norm#執(zhí)行模型構(gòu)建部分的代碼self.build_model()

定義我們多層LSTM的網(wǎng)絡(luò)結(jié)構(gòu)這里,不論是encoder還是decoder,我們都定義一個(gè)兩層的LSTMCell,同時(shí)每一個(gè)cell都添加上DropoutWrapper。

def_create_rnn_cell(self):defsingle_rnn_cell():#創(chuàng)建單個(gè)cell,這里需要注意的是一定要使用一個(gè)single_rnn_cell的函數(shù),不然直接把cell放在MultiRNNCell#的列表中最終模型會發(fā)生錯(cuò)誤single_cell=tf.contrib.rnn.LSTMCell(self.rnn_size)#添加dropoutcell=tf.contrib.rnn.DropoutWrapper(single_cell,output_keep_prob=self.keep_prob_placeholder)returncell#列表中每個(gè)元素都是調(diào)用single_rnn_cell函數(shù)cell=tf.contrib.rnn.MultiRNNCell([single_rnn_cell()for_inrange(self.num_layers)])returncell

定義模型的placeholder

self.encoder_inputs=tf.placeholder(tf.int32,[None,None],name='encoder_inputs')self.encoder_inputs_length=tf.placeholder(tf.int32,[None],name='encoder_inputs_length')self.batch_size=tf.placeholder(tf.int32,[],name='batch_size')self.keep_prob_placeholder=tf.placeholder(tf.float32,name='keep_prob_placeholder')self.decoder_targets=tf.placeholder(tf.int32,[None,None],name='decoder_targets')self.decoder_targets_length=tf.placeholder(tf.int32,[None],name='decoder_targets_length')self.max_target_sequence_length=tf.reduce_max(self.decoder_targets_length,name='max_target_len')self.mask=tf.sequence_mask(self.decoder_targets_length,self.max_target_sequence_length,dtype=tf.float32,name='masks')

定義encoder

withtf.variable_scope('encoder'):#創(chuàng)建LSTMCell,兩層+dropoutencoder_cell=self._create_rnn_cell()#構(gòu)建embedding矩陣,encoder和decoder公用該詞向量矩陣embedding=tf.get_variable('embedding',[self.vocab_size,self.embedding_size])encoder_inputs_embedded=tf.nn.embedding_lookup(embedding,self.encoder_inputs)#使用dynamic_rnn構(gòu)建LSTM模型,將輸入編碼成隱層向量。#encoder_outputs用于attention,batch_size*encoder_inputs_length*rnn_size,#encoder_state用于decoder的初始化狀態(tài),batch_size*rnn_szieencoder_outputs,encoder_state=tf.nn.dynamic_rnn(encoder_cell,encoder_inputs_embedded,sequence_length=self.encoder_inputs_length,dtype=tf.float32)

定義decoder在decoder階段,我們?nèi)匀皇嵌x了兩種模式,一種是訓(xùn)練,一種是預(yù)測,在訓(xùn)練模式下,decoder的輸入是真實(shí)的target序列,而在預(yù)測時(shí),我們可以使用貪心策略或者是beam_search策略。

withtf.variable_scope('decoder'):encoder_inputs_length=self.encoder_inputs_length#ifself.beam_search:##如果使用beam_search,則需要將encoder的輸出進(jìn)行tile_batch,其實(shí)就是復(fù)制beam_size份。#print("usebeamsearchdecoding..")#encoder_outputs=tf.contrib.seq2seq.tile_batch(encoder_outputs,multiplier=self.beam_size)#encoder_state=nest.map_structure(lambdas:tf.contrib.seq2seq.tile_batch(s,self.beam_size),encoder_state)#encoder_inputs_length=tf.contrib.seq2seq.tile_batch(self.encoder_inputs_length,multiplier=self.beam_size)attention_mechanism=tf.contrib.seq2seq.BahdanauAttention(num_units=self.rnn_size,memory=encoder_outputs,memory_sequence_length=encoder_inputs_length)#attention_mechanism=tf.contrib.seq2seq.LuongAttention(num_units=self.rnn_size,memory=encoder_outputs,memory_sequence_length=encoder_inputs_length)#定義decoder階段要是用的LSTMCell,然后為其封裝attentionwrapperdecoder_cell=self._create_rnn_cell()decoder_cell=tf.contrib.seq2seq.AttentionWrapper(cell=decoder_cell,attention_mechanism=attention_mechanism,attention_layer_size=self.rnn_size,name='Attention_Wrapper')#如果使用beam_seach則batch_size=self.batch_size*self.beam_size。因?yàn)橹耙呀?jīng)復(fù)制過一次#batch_size=self.batch_sizeifnotself.beam_searchelseself.batch_size*self.beam_sizebatch_size=self.batch_size#定義decoder階段的初始化狀態(tài),直接使用encoder階段的最后一個(gè)隱層狀態(tài)進(jìn)行賦值decoder_initial_state=decoder_cell.zero_state(batch_size=batch_size,dtype=tf.float32).clone(cell_state=encoder_state)output_layer=tf.layers.Dense(self.vocab_size,kernel_initializer=tf.truncated_normal_initializer(mean=0.0,stddev=0.1))ifself.mode=='train':#定義decoder階段的輸入,其實(shí)就是在decoder的target開始處添加一個(gè),并刪除結(jié)尾處的,并進(jìn)行embedding。#decoder_inputs_embedded的shape為[batch_size,decoder_targets_length,embedding_size]ending=tf.strided_slice(self.decoder_targets,[0,0],[self.batch_size,-1],[1,1])decoder_input=tf.concat([tf.fill([self.batch_size,1],self.word_to_idx['']),ending],1)decoder_inputs_embedded=tf.nn.embedding_lookup(embedding,decoder_input)#訓(xùn)練階段,使用TrainingHelper+BasicDecoder的組合,這一般是固定的,當(dāng)然也可以自己定義Helper類,實(shí)現(xiàn)自己的功能training_helper=tf.contrib.seq2seq.TrainingHelper(inputs=decoder_inputs_embedded,sequence_length=self.decoder_targets_length,time_major=False,name='training_helper')training_decoder=tf.contrib.seq2seq.BasicDecoder(cell=decoder_cell,helper=training_helper,initial_state=decoder_initial_state,output_layer=output_layer)#調(diào)用dynamic_decode進(jìn)行解碼,decoder_outputs是一個(gè)namedtuple,里面包含兩項(xiàng)(rnn_outputs,sample_id)#rnn_output:[batch_size,decoder_targets_length,vocab_size],保存decode每個(gè)時(shí)刻每個(gè)單詞的概率,可以用來計(jì)算loss#sample_id:[batch_size],tf.int32,保存最終的編碼結(jié)果。可以表示最后的答案decoder_outputs,_,_=tf.contrib.seq2seq.dynamic_decode(decoder=training_decoder,impute_finished=True,maximum_iterations=self.max_target_sequence_length)#根據(jù)輸出計(jì)算loss和梯度,并定義進(jìn)行更新的AdamOptimizer和train_opself.decoder_logits_train=tf.identity(decoder_outputs.rnn_output)self.decoder_predict_train=tf.argmax(self.decoder_logits_train,axis=-1,name='decoder_pred_train')#使用sequence_loss計(jì)算loss,這里需要傳入之前定義的mask標(biāo)志self.loss=tf.contrib.seq2seq.sequence_loss(logits=self.decoder_logits_train,targets=self.decoder_targets,weights=self.mask)#Trainingsummaryforthecurrentbatch_losstf.summary.scalar('loss',self.loss)self.summary_op=tf.summary.merge_all()optimizer=tf.train.AdamOptimizer(self.learing_rate)trainable_params=tf.trainable_variables()gradients=tf.gradients(self.loss,trainable_params)clip_gradients,_=tf.clip_by_global_norm(gradients,self.max_gradient_norm)self.train_op=optimizer.apply_gradients(zip(clip_gradients,trainable_params))elifself.mode=='decode':start_tokens=tf.ones([self.batch_size,],tf.int32)*self.word_to_idx['']end_token=self.word_to_idx['']#decoder階段根據(jù)是否使用beam_search決定不同的組合,#如果使用則直接調(diào)用BeamSearchDecoder(里面已經(jīng)實(shí)現(xiàn)了helper類)#如果不使用則調(diào)用GreedyEmbeddingHelper+BasicDecoder的組合進(jìn)行貪婪式解碼ifself.beam_search:inference_decoder=tf.contrib.seq2seq.BeamSearchDecoder(cell=decoder_cell,embedding=embedding,start_tokens=start_tokens,end_token=end_token,initial_state=decoder_initial_state,beam_width=self.beam_size,output_layer=output_layer)else:decoding_helper=tf.contrib.seq2seq.GreedyEmbeddingHelper(embedding=embedding,start_tokens=start_tokens,end_token=end_token)inference_decoder=tf.contrib.seq2seq.BasicDecoder(cell=decoder_cell,helper=decoding_helper,initial_state=decoder_initial_state,output_layer=output_layer)decoder_outputs,_,_=tf.contrib.seq2seq.dynamic_decode(decoder=inference_decoder,maximum_iterations=10)#調(diào)用dynamic_decode進(jìn)行解碼,decoder_outputs是一個(gè)namedtuple,#對于不使用beam_search的時(shí)候,它里面包含兩項(xiàng)(rnn_outputs,sample_id)#rnn_output:[batch_size,decoder_targets_length,vocab_size]#sample_id:[batch_size,decoder_targets_length],tf.int32#對于使用beam_search的時(shí)候,它里面包含兩項(xiàng)(predicted_ids,beam_search_decoder_output)#predicted_ids:[batch_size,decoder_targets_length,beam_size],保存輸出結(jié)果#beam_search_decoder_output:BeamSearchDecoderOutputinstancenamedtuple(scores,predicted_ids,parent_ids)#所以對應(yīng)只需要返回predicted_ids或者sample_id即可翻譯成最終的結(jié)果ifself.beam_search:self.decoder_predict_decode=decoder_outputs.predicted_idselse:self.decoder_predict_decode=tf.expand_dims(decoder_outputs.sample_id,-1)

訓(xùn)練階段對于訓(xùn)練階段,需要執(zhí)行self.train_op, self.loss, self.summary_op三個(gè)op,并傳入相應(yīng)的數(shù)據(jù)

deftrain(self,sess,batch):#對于訓(xùn)練階段,需要執(zhí)行self.train_op,self.loss,self.summary_op三個(gè)op,并傳入相應(yīng)的數(shù)據(jù)feed_dict={self.encoder_inputs:batch.encoder_inputs,self.encoder_inputs_length:batch.encoder_inputs_length,self.decoder_targets:batch.decoder_targets,self.decoder_targets_length:batch.decoder_targets_length,self.keep_prob_placeholder:0.5,self.batch_size:len(batch.encoder_inputs)}_,loss,summary=sess.run([self.train_op,self.loss,self.summary_op],feed_dict=feed_dict)returnloss,summary

評估階段對于eval階段,不需要反向傳播,所以只執(zhí)行self.loss, self.summary_op兩個(gè)op,并傳入相應(yīng)的數(shù)據(jù)

defeval(self,sess,batch):#對于eval階段,不需要反向傳播,所以只執(zhí)行self.loss,self.summary_op兩個(gè)op,并傳入相應(yīng)的數(shù)據(jù)feed_dict={self.encoder_inputs:batch.encoder_inputs,self.encoder_inputs_length:batch.encoder_inputs_length,self.decoder_targets:batch.decoder_targets,self.decoder_targets_length:batch.decoder_targets_length,self.keep_prob_placeholder:1.0,self.batch_size:len(batch.encoder_inputs)}loss,summary=sess.run([self.loss,self.summary_op],feed_dict=feed_dict)returnloss,summary

預(yù)測階段infer階段只需要運(yùn)行最后的結(jié)果,不需要計(jì)算loss,所以feed_dict只需要傳入encoder_input相應(yīng)的數(shù)據(jù)即可

definfer(self,sess,batch):#infer階段只需要運(yùn)行最后的結(jié)果,不需要計(jì)算loss,所以feed_dict只需要傳入encoder_input相應(yīng)的數(shù)據(jù)即可feed_dict={self.encoder_inputs:batch.encoder_inputs,self.encoder_inputs_length:batch.encoder_inputs_length,self.keep_prob_placeholder:1.0,self.batch_size:len(batch.encoder_inputs)}predict=sess.run([self.decoder_predict_decode],feed_dict=feed_dict)returnpredict

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Decoder
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    10750
  • 梯度
    +關(guān)注

    關(guān)注

    0

    文章

    30

    瀏覽量

    10360
  • 機(jī)器翻譯
    +關(guān)注

    關(guān)注

    0

    文章

    139

    瀏覽量

    14954

原文標(biāo)題:使用Seq2Seq+attention實(shí)現(xiàn)簡單的Chatbot

文章出處:【微信號:atleadai,微信公眾號:LeadAI OpenLab】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Attention的具體原理詳解

    注意力機(jī)制Attention mechanism在序列學(xué)習(xí)任務(wù)上具有巨大的提升作用,在編解碼器框架內(nèi),通過在編碼段加入A模型,對源數(shù)據(jù)序列進(jìn)行數(shù)據(jù)加權(quán)變換,或者在解碼端引入A模型,對目標(biāo)數(shù)據(jù)進(jìn)行加權(quán)變化,可以有效提高序列對序列的自然方式下的系統(tǒng)表現(xiàn)。
    發(fā)表于 11-23 10:44 ?8003次閱讀

    深度學(xué)習(xí)模型介紹,Attention機(jī)制和其它改進(jìn)

    al. 于2016年提出了PCNNs+Attention(APCNNs)算法。相比之前的PCNNs模型,該算法在池化層之后,softmax層之前加入了一種基于句子級別的attention機(jī)制,算法的示意圖如下:
    的頭像 發(fā)表于 03-22 15:41 ?1.9w次閱讀
    深度學(xué)習(xí)模型介紹,<b class='flag-5'>Attention</b><b class='flag-5'>機(jī)制</b>和其它改進(jìn)

    將自注意力機(jī)制引入GAN,革新圖像合成方式

    我們在ImageNet數(shù)據(jù)集上進(jìn)行了大量的實(shí)驗(yàn),以驗(yàn)證所提出的self-attention機(jī)制和穩(wěn)定技術(shù)的有效性。SAGAN在圖像合成方面的表現(xiàn)遠(yuǎn)遠(yuǎn)超過了state-of-the-art的表現(xiàn),將此
    的頭像 發(fā)表于 05-25 17:17 ?1.8w次閱讀
    將自注意力<b class='flag-5'>機(jī)制</b>引入GAN,革新圖像合成方式

    究竟Self-Attention結(jié)構(gòu)是怎樣的?

    當(dāng)我們處理Thinking這個(gè)詞時(shí),我們需要計(jì)算句子中所有詞與它的Attention Score,這就像將當(dāng)前詞作為搜索的query,去和句子中所有詞(包含該詞本身)的key去匹配,看看相關(guān)度有多高。
    的頭像 發(fā)表于 07-18 14:29 ?1.7w次閱讀
    究竟Self-<b class='flag-5'>Attention</b>結(jié)構(gòu)是怎樣的?

    知識蒸餾是一種模型壓縮常見方法

    Attention Transfer , 傳遞teacher網(wǎng)絡(luò)的attention信息給student網(wǎng)絡(luò)。首先,CNN的attention一般分為兩種,spatial-attention
    的頭像 發(fā)表于 07-27 07:08 ?1.5w次閱讀
    知識蒸餾是一種模型壓縮常見方法

    首個(gè)基于深度學(xué)習(xí)的端到端在線手寫數(shù)學(xué)公式識別模型

    TAP 延續(xù)了會議文章 [1] 中的 Encoder 框架,在 Attention 機(jī)制上針對在線手寫公式識別提出了 Spatial Attention, Temporal Attention
    的頭像 發(fā)表于 09-20 15:35 ?9132次閱讀
    首個(gè)基于深度學(xué)習(xí)的端到端在線手寫數(shù)學(xué)公式識別模型

    使用知識圖譜作為輸入的表征,研究一個(gè)端到端的graph-to-text生成系統(tǒng)

    graph-to-text的一個(gè)重要任務(wù)是從 Abstract Meaning Representation (AMR) graph生成內(nèi)容,其中圖的編碼方法主要有graph
    的頭像 發(fā)表于 08-28 10:28 ?4043次閱讀
    使用知識圖譜作為輸入的表征,研究一個(gè)端到端的graph-to-text生成系統(tǒng)

    基于BERT+Bo-LSTM+Attention的病歷短文分類模型

    病歷文本的提取與自動(dòng)分類的方法具有很大的臨床價(jià)值。文中嘗試提出一種基于BERT十 BI-LSTM+ Attention融合的病歷短文本分類模型。使用BERT預(yù)處理獲取短文本向量作為模型輸入,對比BERT與 word2vec模型的預(yù)訓(xùn)練效果,對比Bⅰ-LSTM十 Atten
    發(fā)表于 04-26 14:30 ?13次下載
    基于BERT+Bo-LSTM+<b class='flag-5'>Attention</b>的病歷短文分類模型

    一種Attention-CNN惡意代碼檢測模型

    。首先結(jié)合卷積神經(jīng)網(wǎng)絡(luò)(CNN)和注意力機(jī)制,構(gòu)建了Δ ttention-CNN惡意代碼檢測模型;然后將惡意代碼轉(zhuǎn)化為灰度圖像作為模型輸入,通過對 Attention-CNN模型訓(xùn)練及測試得到惡意代碼對應(yīng)的注意力圖以及檢測果;最終將從惡意代碼注意力圖中提取的重要字節(jié)
    發(fā)表于 04-27 10:31 ?32次下載
    一種<b class='flag-5'>Attention</b>-CNN惡意代碼檢測模型

    簡述深度學(xué)習(xí)中的Attention機(jī)制

    Attention機(jī)制在深度學(xué)習(xí)中得到了廣泛的應(yīng)用,本文通過公式及圖片詳細(xì)講解attention機(jī)制的計(jì)算過程及意義,首先從最早引入attentio
    的頭像 發(fā)表于 02-22 14:21 ?1762次閱讀
    簡述深度學(xué)習(xí)中的<b class='flag-5'>Attention</b><b class='flag-5'>機(jī)制</b>

    解析ChatGPT背后的技術(shù)演進(jìn)

      Attention注意力機(jī)制與Transformer是大語言模型的基石?! ?)Attention機(jī)制在并行計(jì)算(效率更高)以及解決長距離信息依賴的能力(效果更好)上優(yōu)于過去的神經(jīng)
    發(fā)表于 03-29 16:57 ?1次下載

    計(jì)算機(jī)視覺中的注意力機(jī)制

    計(jì)算機(jī)視覺中的注意力機(jī)制 卷積神經(jīng)網(wǎng)絡(luò)中常用的Attention 參考 注意力機(jī)制簡介與分類 注意力機(jī)制Attention Mechan
    發(fā)表于 05-22 09:46 ?0次下載
    計(jì)算機(jī)視覺中的注意力<b class='flag-5'>機(jī)制</b>

    詳細(xì)介紹?注意力機(jī)制中的掩碼

    注意力機(jī)制的掩碼允許我們發(fā)送不同長度的批次數(shù)據(jù)一次性的發(fā)送到transformer中。在代碼中是通過將所有序列填充到相同的長度,然后使用“attention_mask”張量來識別哪些令牌是填充的來做到這一點(diǎn),本文將詳細(xì)介紹這個(gè)掩碼的原理和
    的頭像 發(fā)表于 07-17 16:46 ?763次閱讀
    詳細(xì)介紹?注意力<b class='flag-5'>機(jī)制</b>中的掩碼

    降低Transformer復(fù)雜度O(N^2)的方法匯總

    首先來詳細(xì)說明為什么Transformer的計(jì)算復(fù)雜度是 。將Transformer中標(biāo)準(zhǔn)的Attention稱為Softmax Attention。令 為長度為 的序列, 其維度為 , 。 可看作Softmax Attention
    的頭像 發(fā)表于 12-04 15:31 ?1249次閱讀
    降低Transformer復(fù)雜度O(N^2)的方法匯總

    深入淺出理解PagedAttention CUDA實(shí)現(xiàn)

    vLLM 中,LLM 推理的 prefill 階段 attention 計(jì)算使用第三方庫 xformers 的優(yōu)化實(shí)現(xiàn),decoding 階段 attention 計(jì)算則使用項(xiàng)目編譯 CUDA 代碼實(shí)現(xiàn)。
    的頭像 發(fā)表于 01-09 11:43 ?2015次閱讀
    深入淺出理解PagedAttention CUDA實(shí)現(xiàn)