মনোযোগ হ'ল একটি ভেক্টর vi এর সেটগুলিকে কেবল একটি ভেক্টরগুলিতে একত্রিত করার জন্য একটি পদ্ধতি , প্রায়শই একটি অনুসন্ধান ভেক্টর u মাধ্যমে । সাধারণত, vi হয় হয় মডেলটির ইনপুট বা পূর্ববর্তী সময়-পদক্ষেপগুলির লুকানো রাজ্য, বা লুকানো এক স্তর নীচে (স্ট্যাকড এলএসটিএমগুলির ক্ষেত্রে) states
ফলাফলের প্রায়ই প্রসঙ্গ ভেক্টর বলা হয় c , যেহেতু এটা রয়েছে প্রসঙ্গ বর্তমান সময়-পদক্ষেপ প্রাসঙ্গিক।
এই অতিরিক্ত প্রসঙ্গ ভেক্টর c তারপর পাশাপাশি RNN / LSTM মধ্যে প্রতিপালিত হয় (এটা শুধু মূল ইনপুট দিয়ে ঘনিভূত করা যেতে পারে)। অতএব, প্রসঙ্গটি ভবিষ্যদ্বাণীতে সহায়তা করতে ব্যবহার করা যেতে পারে।
এই কাজ করতে সহজ উপায় কম্পিউট সম্ভাব্যতা ভেক্টর হয় p=softmax(VTu) এবং c=∑ipivi যেখানে V সমস্ত পূর্ববর্তী এর সংযুক্তকরণের হয় vi । ভেক্টর একটি সাধারণ লুকআপ u বর্তমান লুকানো রাষ্ট্র ht ।
এটিতে অনেকগুলি প্রকরণ রয়েছে এবং আপনি নিজের পছন্দ মতো জিনিসগুলিকে জটিল করে তুলতে পারেন। উদাহরণস্বরূপ, লগইট হিসাবে vTiu ব্যবহার করার পরিবর্তে , কেউ f(vi,u) পরিবর্তে, যেখানে f একটি অবাধ নিউরাল নেটওয়ার্ক।
সিকোয়েন্স-টু-সিকোয়েন্স মডেলগুলির জন্য একটি সাধারণ মনোযোগ ব্যবস্থা p=softmax(qTtanh(W1vi+W2ht)) , যেখানে v এনকোডারটির লুকানো রাজ্য, এবং ht বর্তমান লুকানো অবস্থা hidden ডিকোডার এর q এবং উভয় W s পরামিতি।
কিছু কাগজ যা মনোযোগ ধারণার উপর ভিন্ন ভিন্নতা দেখায়:
সংযোজক অপ্টিমাইজেশন সমস্যা সমাধানের জন্য পয়েন্টার নেটওয়ার্কগুলি রেফারেন্স ইনপুটগুলিতে মনোযোগ ব্যবহার করে।
পুনরাবৃত্তি সত্তা নেটওয়ার্কগুলি পাঠ্য পড়ার সময় বিভিন্ন সত্তা (লোক / অবজেক্টস) এর জন্য পৃথক মেমরি স্টেটগুলি বজায় রাখে এবং মনোযোগ ব্যবহার করে সঠিক মেমরি অবস্থার আপডেট করে।
ট্রান্সফর্মার মডেলগুলিও মনোযোগের ব্যাপক ব্যবহার করে। মনোযোগ তাদের তৈয়ার সামান্য বেশি সাধারণ এবং জড়িত মূল ভেক্টর ki : মনোযোগ ওজন p প্রকৃতপক্ষে কী ও লুকআপ মধ্যে নির্ণিত হয়, এবং প্রসঙ্গ তারপর নির্মান করা হয় vi ।
এখানে মনোযোগের এক ফর্মটির দ্রুত বাস্তবায়ন করা হচ্ছে, যদিও আমি কিছু সাধারণ পরীক্ষায় উত্তীর্ণ হওয়ার সত্যতা ছাড়াই গ্যারান্টি দিতে পারি না।
বেসিক আরএনএন:
def rnn(inputs_split):
bias = tf.get_variable('bias', shape = [hidden_dim, 1])
weight_hidden = tf.tile(tf.get_variable('hidden', shape = [1, hidden_dim, hidden_dim]), [batch, 1, 1])
weight_input = tf.tile(tf.get_variable('input', shape = [1, hidden_dim, in_dim]), [batch, 1, 1])
hidden_states = [tf.zeros((batch, hidden_dim, 1), tf.float32)]
for i, input in enumerate(inputs_split):
input = tf.reshape(input, (batch, in_dim, 1))
last_state = hidden_states[-1]
hidden = tf.nn.tanh( tf.matmul(weight_input, input) + tf.matmul(weight_hidden, last_state) + bias )
hidden_states.append(hidden)
return hidden_states[-1]
মনোযোগ দিয়ে, নতুন লুকানো অবস্থার গণনা করার আগে আমরা কয়েকটি লাইন যুক্ত করেছি:
if len(hidden_states) > 1:
logits = tf.transpose(tf.reduce_mean(last_state * hidden_states[:-1], axis = [2, 3]))
probs = tf.nn.softmax(logits)
probs = tf.reshape(probs, (batch, -1, 1, 1))
context = tf.add_n([v * prob for (v, prob) in zip(hidden_states[:-1], tf.unstack(probs, axis = 1))])
else:
context = tf.zeros_like(last_state)
last_state = tf.concat([last_state, context], axis = 1)
hidden = tf.nn.tanh( tf.matmul(weight_input, input) + tf.matmul(weight_hidden, last_state) + bias )
সম্পূর্ণ কোড