অধ্যায় 2 · ভেক্টর ও ম্যাট্রিক্স
ম্যাট্রিক্স: যে টেবিল রূপান্তর করে
- পৃষ্ঠা 4 / 17
- 3 মিনিট পড়া
ম্যাট্রিক্স হলো সংখ্যার একটা টেবিল: সারি আর কলাম। একটা ডেটাসেট একটা ম্যাট্রিক্স (প্রতি উদাহরণে এক সারি, প্রতি ফিচারে এক কলাম)। একটা সাদাকালো ছবি পিক্সেলের ম্যাট্রিক্স। আর নিউরাল নেটওয়ার্কের প্রতিটা লেয়ার তার জ্ঞান রাখে ওয়েটের একটা ম্যাট্রিক্সে।
import numpy as np
# ৩ জন ছাত্র × ৪টা পরীক্ষা: প্রতি ছাত্রে এক সারি, প্রতি পরীক্ষায় এক কলাম
scores = np.array([
[72, 85, 90, 64],
[88, 79, 95, 70],
[55, 60, 58, 81],
])
print(scores.shape) # (সারি, কলাম)
print(scores[1]) # একটা সারি: দ্বিতীয় ছাত্র
print(scores[:, 2]) # একটা কলাম: তৃতীয় পরীক্ষা
print(scores.T.shape) # ট্রান্সপোজ: সারি কলাম হয়ে যায়(3, 4)
[88 79 95 70]
[90 95 58]
(4, 3)- শেপ
(3, 4)মানে ৩টা সারি আর ৪টা কলাম। কিছু ভুল হলে সবার আগে শেপ দেখুন — সংখ্যার কোডের বেশিরভাগ বাগই শেপের বাগ। scores[1]একটা সারি;scores[:, 2]মানে "প্রতিটা সারি, কলাম ২"।- ট্রান্সপোজ
scores.Tটেবিলটা উল্টে দেয়, সারি কলাম হয়ে যায়:(3, 4)হয়(4, 3)।
ম্যাট্রিক্স গুণ ভেক্টর: একসাথে অনেক ডট প্রোডাক্ট
একটা ম্যাট্রিক্সকে একটা ভেক্টর দিয়ে গুণ করলে প্রতিটা সারির সাথে ভেক্টরের ডট প্রোডাক্ট নেওয়া হয়। ফলাফলে প্রতি সারিতে একটা সংখ্যা। নিউরাল নেটওয়ার্কের একটা লেয়ার ঠিক এটাই করে: W-এর প্রতিটা সারি একটা "নিউরন", যা সব ইনপুটকে ওজন দেয় আর নিজের বায়াস যোগ করে।
z = W x + bimport numpy as np
x = np.array([0.5, -1.0, 2.0]) # ইনপুট: ৩টা ফিচার
W = np.array([ # ওয়েট: ২টা আউটপুট × ৩টা ইনপুট
[0.2, 0.8, -0.5],
[1.0, -0.3, 0.4],
])
b = np.array([0.1, -0.2]) # প্রতি আউটপুটে একটা বায়াস
z = W @ x + b # প্রতিটা আউটপুট একটা ডট প্রোডাক্ট যোগ বায়াস
print(z)
print(np.maximum(z, 0)) # ReLU: ঋণাত্মক মান 0 হয়ে যায়[-1.6 1.4]
[0. 1.4]প্রথম আউটপুট: ০.২×০.৫ + ০.৮×(−১.০) + (−০.৫)×২.০ + ০.১ = −১.৬। তারপর ReLU-এর মতো একটা অ্যাক্টিভেশন ফাংশন (ধনাত্মক রাখো, ঋণাত্মককে ০ বানাও) সেই বাঁক যোগ করে, যার কারণে একের ওপর এক লেয়ার শুধু সরলরেখা নয়, বাঁকা প্যাটার্নও শিখতে পারে। একটা ডিপ নেটওয়ার্ক হলো এরকম অনেক ধাপ, একের পর এক।
রূপান্তর হিসেবে ম্যাট্রিক্স
W x-কে দেখার দ্বিতীয় একটা উপায় আছে: ম্যাট্রিক্স ভেক্টরটাকে সরায় — ঘোরায়, টেনে লম্বা করে বা চেপে নতুন একটা স্পেসে নিয়ে যায়। ওপরের লেয়ারটা ৩-মাত্রার স্পেসের একটা বিন্দুকে ২-মাত্রার স্পেসে বসায়। ডিপ নেটওয়ার্ক এভাবে ইনপুটকে রূপান্তর করতেই থাকে, যতক্ষণ না উত্তর পড়া সহজ হয়ে যায়। কোর্সের 3Blue1Brown ভিডিওগুলো এটা চমৎকারভাবে দেখায়।
নিজে চেষ্টা করুন
scores.mean(axis=0)দিয়ে প্রতিটা পরীক্ষার গড় আরaxis=1দিয়ে প্রতিটা ছাত্রের গড় প্রিন্ট করুন।- লেয়ারের দ্বিতীয় আউটপুট হাতে হিসাব করে দেখুন সেটা ১.৪ কিনা।
xএমনভাবে বদলান যাতে দুটো আউটপুটই ঋণাত্মক হয়। ReLU কী দেয়?