কীভাবে একটি সাধারণ লজিস্টিক রিগ্রেশন মডেল এমএনআইএসটিতে একটি 92% শ্রেণিবিন্যাসের নির্ভুলতা অর্জন করে?


66

যদিও এমএনআইএসটি ডেটাসেটের সমস্ত চিত্র একই রকম স্কেল সহ কেন্দ্রীভূত এবং কোনও ঘোরাঘুরি ছাড়াই মুখোমুখি, তবুও তাদের একটি উল্লেখযোগ্য হস্তাক্ষর প্রকরণ রয়েছে যে একটি লিনিয়ার মডেল কীভাবে উচ্চতর শ্রেণিবদ্ধকরণের নির্ভুলতা অর্জন করে তা আমাকে ধাঁধা দেয়।

যতক্ষণ আমি কল্পনা করতে সক্ষম হচ্ছি, উল্লেখযোগ্য হস্তাক্ষর পরিবর্তনের প্রেক্ষিতে, অঙ্কগুলি একটি 784 মাত্রিক স্থানে রৈখিকভাবে অবিভাজ্য হওয়া উচিত, অর্থাত্ একটি ছোট জটিল হওয়া উচিত (যদিও খুব জটিল নয়) বিভিন্ন অঙ্কগুলি পৃথক করে , ভাল-উদ্ধৃত উদাহরণের মতো যেখানে ধনাত্মক এবং negativeণাত্মক শ্রেণিগুলি কোনও রৈখিক শ্রেণিবদ্ধ দ্বারা পৃথক করা যায় না। এটি আমার কাছে বিস্মিত বলে মনে হচ্ছে যে কীভাবে বহু-শ্রেণীর লজিস্টিক রিগ্রেশন সম্পূর্ণরূপে রৈখিক বৈশিষ্ট্যগুলির সাথে (কোনও বহুপদী বৈশিষ্ট্য নেই) এত উচ্চ নির্ভুলতা উত্পাদন করে।XOR

উদাহরণ হিসাবে, ছবিতে কোনও পিক্সেল দেওয়া, এবং সংখ্যার পৃথক হাতের লিখিত প্রকরণগুলি পিক্সেলটি আলোকিত করতে পারে বা না করতে পারে। অতএব, শিখেছি ওজন একটি সেট সঙ্গে, প্রতিটি পিক্সেল একটি হিসাবে একটি অঙ্ক বর্ণন করতে পারেন পাশাপাশি হিসেবে । শুধুমাত্র পিক্সেল মানগুলির সংমিশ্রণে এটি অঙ্ক বা একটি কিনা তা বলা সম্ভব । এটি বেশিরভাগ অঙ্কের জোড়ার ক্ষেত্রে সত্য। সুতরাং, কীভাবে লজিস্টিক রিগ্রেশন, যে অন্ধভাবে তার সিদ্ধান্তকে সমস্ত পিক্সেল মানগুলিতে (কোনও আন্ত-পিক্সেল নির্ভরতা বিবেচনা না করে) স্বাধীনভাবে ভিত্তি করে, যেমন উচ্চতর নির্ভুলতা অর্জন করতে সক্ষম।232323

আমি জানি যে আমি কোথাও ভুল বা চিত্রগুলির মধ্যে তারতম্যটি খুব বেশি করে অনুমান করছি। তবে এটি দুর্দান্ত হবে যদি কেউ আমাকে কীভাবে অঙ্কগুলি 'প্রায়' রৈখিকভাবে পৃথকভাবে পৃথক করতে পারে তার অন্তর্দৃষ্টি দিয়ে সহায়তা করতে পারে।


হাতে লেখা শংখ্যা: পাঠ্যপুস্তক Sparsity সঙ্গে পরিসংখ্যানগত শিক্ষণ কটাক্ষপাত আছে:, Lasso এবং সরলীকরণ 3.3.1 উদাহরণ web.stanford.edu/~hastie/StatLearnSparsity_files/SLS.pdf
আদ্রিয়ান

আমি কৌতূহলী হয়েছি: দণ্ডিত লিনিয়ার মডেলের মতো কিছু (যেমন, গ্ল্যামনেট) সমস্যাটি কীভাবে করতে পারে? যদি আমি মনে করি, আপনি যা রিপোর্ট করছেন তা হ'ল আনপেনালাইজড আউট-অফ-নমুনার নির্ভুলতা।
ক্লিফ এবি

উত্তর:


84

tl; dr যদিও এটি একটি চিত্র শ্রেণীবদ্ধ ডেটাসেট, এটি একটি খুব সহজ কাজ হিসাবে রয়ে গেছে , যার জন্য সহজেই ইনপুট থেকে পূর্বাভাসে সরাসরি ম্যাপিং পাওয়া যায়।


উত্তর:

এটি একটি খুব আকর্ষণীয় প্রশ্ন এবং লজিস্টিক রিগ্রেশনটির সরলতার জন্য ধন্যবাদ যা আপনি আসলে উত্তরটি খুঁজে পেতে পারেন।

লজিস্টিক রিগ্রেশন যা করে তা প্রতিটি চিত্রের জন্য ইনপুট গ্রহণ করে এবং এর পূর্বাভাস তৈরি করতে ওজন দিয়ে তাদের গুণ করে। মজার বিষয় হ'ল ইনপুট এবং আউটপুট (যেমন কোনও লুকানো স্তর নেই) এর মধ্যে সরাসরি ম্যাপিংয়ের কারণে, প্রতিটি শ্রেণীর সম্ভাব্যতা গণনা করার সময় প্রতিটি ওজনের মান ইনপুটগুলির প্রতিটি বিবেচনায় নেওয়া কতটা তার সাথে যায়। এখন, প্রতিটি শ্রেণীর জন্য ওজন নিয়ে এবং সেগুলি পুনরায় আকার দিয়ে (অর্থাত্ চিত্রের রেজোলিউশন) এর মাধ্যমে আমরা বলতে পারি যে প্রতিটি শ্রেণীর গণনার জন্য পিক্সেলগুলি সবচেয়ে গুরুত্বপূর্ণ78478428×28

আবার নোট করুন, এগুলি ওজন

এখন উপরের চিত্রটি একবার দেখুন এবং প্রথম দুটি সংখ্যায় (যেমন শূন্য এবং একটি) ফোকাস করুন। নীল ওজনের অর্থ এই পিক্সেলের তীব্রতা সেই শ্রেণীর জন্য প্রচুর অবদান রাখে এবং লাল মানগুলির অর্থ এটি নেতিবাচকভাবে অবদান রাখে।

এখন কল্পনা করুন, একজন ব্যক্তি কীভাবে আঁকেন ? তিনি একটি বৃত্তাকার আকার আঁকেন যা মাঝখানে ফাঁকা। ওজনটি ঠিক তেমনই উঠেছে। আসলে যদি কেউ চিত্রটির মাঝখানে আঁকেন তবে এটি শূন্য হিসাবে নেতিবাচকভাবে গণনা করা হয়। সুতরাং শূন্যগুলি সনাক্ত করতে আপনার কয়েকটি পরিশীলিত ফিল্টার এবং উচ্চ-স্তরের বৈশিষ্ট্যগুলির প্রয়োজন নেই। আপনি কেবল টানা পিক্সেলের অবস্থানগুলি দেখতে এবং এটি অনুসারে বিচার করতে পারেন।0

জন্য একই জিনিস । ইমেজের মাঝখানে এটি সর্বদা একটি সরল উল্লম্ব রেখা থাকে। অন্য সবগুলি নেতিবাচকভাবে গণনা করা হয়।1

ডিজিটের বাকি একটি বিট আরো জটিল, কিন্তু সামান্য কল্পনার সঙ্গে আপনি দেখতে পারেন , , ও । বাকী সংখ্যাগুলি কিছুটা বেশি কঠিন, যা আসলে লজিস্টিক রিগ্রেশনকে উচ্চ-90-এর দশকে পৌঁছানো থেকে সীমাবদ্ধ করে।2378

এর মাধ্যমে আপনি দেখতে পাচ্ছেন যে লজিস্টিক রিগ্রেশনটিতে অনেকগুলি চিত্র সঠিকভাবে পাওয়ার খুব ভাল সুযোগ রয়েছে এবং সে কারণেই এটি এত বেশি স্কোর করে।


উপরের চিত্রটি পুনরুত্পাদন করার কোডটি কিছুটা তারিখযুক্ত তবে এখানে আপনি যান:

import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.examples.tutorials.mnist import input_data

# Load MNIST:
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

# Create model
x = tf.placeholder(tf.float32, shape=(None, 784))
y = tf.placeholder(tf.float32, shape=(None, 10))

W = tf.Variable(tf.zeros((784,10)))
b = tf.Variable(tf.zeros((10)))
z = tf.matmul(x, W) + b

y_hat = tf.nn.softmax(z)
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y * tf.log(y_hat), reduction_indices=[1]))
optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) # 

correct_pred = tf.equal(tf.argmax(y_hat, 1), tf.argmax(y, 1))
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))

# Train model
batch_size = 64
with tf.Session() as sess:

    loss_tr, acc_tr, loss_ts, acc_ts = [], [], [], []

    sess.run(tf.global_variables_initializer()) 

    for step in range(1, 1001):

        x_batch, y_batch = mnist.train.next_batch(batch_size) 
        sess.run(optimizer, feed_dict={x: x_batch, y: y_batch})

        l_tr, a_tr = sess.run([cross_entropy, accuracy], feed_dict={x: x_batch, y: y_batch})
        l_ts, a_ts = sess.run([cross_entropy, accuracy], feed_dict={x: mnist.test.images, y: mnist.test.labels})
        loss_tr.append(l_tr)
        acc_tr.append(a_tr)
        loss_ts.append(l_ts)
        acc_ts.append(a_ts)

    weights = sess.run(W)      
    print('Test Accuracy =', sess.run(accuracy, feed_dict={x: mnist.test.images, y: mnist.test.labels})) 

# Plotting:
for i in range(10):
    plt.subplot(2, 5, i+1)
    weight = weights[:,i].reshape([28,28])
    plt.title(i)
    plt.imshow(weight, cmap='RdBu')  # as noted by @Eric Duminil, cmap='gray' makes the numbers stand out more
    frame1 = plt.gca()
    frame1.axes.get_xaxis().set_visible(False)
    frame1.axes.get_yaxis().set_visible(False)

11
চিত্রণ জন্য ধন্যবাদ। এই ওজন চিত্রগুলি নির্ভুলতা এত বেশি কীভাবে তা আরও স্পষ্ট করে তোলে। চিত্রের আসল লেবেলের সাথে সংশ্লিষ্ট ওজন চিত্রের সাথে একটি হাতে লিখিত অঙ্কিত ইমেজটির বিন্দুবৃদ্ধি বেশিরভাগ ক্ষেত্রে অন্যান্য ওজন লেবেলের সাথে ডট পণ্যের তুলনায় সর্বোচ্চ বলে মনে হয় (এখনও 92% আমার কাছে অনেকটা দেখতে লাগে) এমএনআইএসটিতে ছবিগুলির। তবুও, এটি একটু আশ্চর্যের বিষয় যে এবং বা এবং খুব কমই বিভ্রান্তির ম্যাট্রিক্স পরীক্ষা করার পরে একে অপরের হিসাবে ভুলভাবে শ্রেণিবদ্ধ হয়। যাইহোক, এটি কি এটি। তথ্য কখনও মিথ্যা। :)2378
নীতীশ আগরওয়াল

13
অবশ্যই এটি সহায়তা করে যে ক্লাসিফায়ারটি কখনও দেখার আগে এমএনআইএসটি নমুনাগুলি কেন্দ্রিক, মাপা এবং বিপরীতে-নরমালাইজড। আপনাকে "শূন্যের প্রান্তটি আসলে বাক্সের মাঝখানে দিয়ে গেলে কী হবে?" এই জাতীয় প্রশ্নের সমাধান করতে হবে না? কারণ প্রাক-প্রসেসর ইতিমধ্যে সমস্ত শূন্যকে একই দেখানোর দিকে অনেক এগিয়ে গেছে way
hobbs

1
@ এরিকডুমিনিল আমি আপনার পরামর্শের সাথে স্ক্রিপ্টটিতে একটি প্রশংসা যুক্ত করেছি। ইনপুট জন্য অনেক ধন্যবাদ! : ডি
ডিজিব2011

1
@ নীতিশ আগরওয়াল, আপনি যদি মনে করেন যে এই উত্তরটি আপনার প্রশ্নের জবাব, তবে এটি চিহ্নিত করার বিষয়টি বিবেচনা করুন।
সিনট্যাক্স

9
এই ধরণের প্রক্রিয়াজাতকরণের সাথে আগ্রহী তবে বিশেষভাবে পরিচিত না এমন ব্যক্তির জন্য, এই উত্তরটি মেকানিক্সের একটি দুর্দান্ত স্বজ্ঞাত উদাহরণ দেয়।
ক্রাইলিস-হরতাল-
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.