নিউরাল নেটওয়ার্কে অতিরিক্ত আউটপুট স্তর (দশমিক থেকে বাইনারি)


17

আমি অনলাইন বইয়ের একটি প্রশ্নের মাধ্যমে কাজ করছি:

http://neuralnetworksanddeeplearning.com/chap1.html

আমি বুঝতে পারি যে অতিরিক্ত আউটপুট স্তরটি যদি 5 আউটপুট নিউরনগুলির হয় তবে আমি সম্ভবত পূর্ববর্তী স্তরের জন্য 0.5 এবং প্রতি 0.5 টি ওজনের পক্ষপাত নির্ধারণ করতে পারি। তবে প্রশ্নটি এখন চার আউটপুট নিউরনের একটি নতুন স্তর জিজ্ঞাসা করবে - এটি এ 10 সম্ভাব্য আউটপুট উপস্থাপনের জন্য যথেষ্ট বেশি ।24

এই সমস্যাটি বোঝার এবং সমাধানের সাথে জড়িত পদক্ষেপগুলির মধ্য দিয়ে কেউ কি আমাকে চলতে পারে?

অনুশীলন প্রশ্ন:

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

এখানে চিত্র বর্ণনা লিখুন

উত্তর:


16

প্রশ্নটি আপনাকে পুরানো উপস্থাপনা এবং নতুন উপস্থাপনের মধ্যে নিম্নলিখিত ম্যাপিং করতে বলছে:

Represent    Old                     New
0            1 0 0 0 0 0 0 0 0 0     0 0 0 0 
1            0 1 0 0 0 0 0 0 0 0     0 0 0 1 
2            0 0 1 0 0 0 0 0 0 0     0 0 1 0 

3            0 0 0 1 0 0 0 0 0 0     0 0 1 1 
4            0 0 0 0 1 0 0 0 0 0     0 1 0 0 
5            0 0 0 0 0 1 0 0 0 0     0 1 0 1 

6            0 0 0 0 0 0 1 0 0 0     0 1 1 0 
7            0 0 0 0 0 0 0 1 0 0     0 1 1 1 
8            0 0 0 0 0 0 0 0 1 0     1 0 0 0 

9            0 0 0 0 0 0 0 0 0 1     1 0 0 1

কারণ পুরাতন আউটপুট স্তরটির একটি সাধারণ ফর্ম রয়েছে, এটি অর্জন করা বেশ সহজ quite প্রতিটি আউটপুট নিউরনের নিজের এবং আউটপুট নিউরনের মধ্যে একটি ইতিবাচক ওজন হওয়া উচিত যা এটি উপস্থাপন করা উচিত এবং নিজের এবং আউটপুট নিউরনের মধ্যে নেতিবাচক ওজন যা বন্ধ হওয়া উচিত। মানগুলি পরিষ্কারভাবে চালু বা বন্ধ করার জন্য পর্যাপ্ত পরিমাণে একত্রিত হওয়া উচিত, সুতরাং আমি লারিশ ওজন যেমন +10 এবং -10 ব্যবহার করব।

এখানে যদি সিগময়েড অ্যাক্টিভেশন থাকে তবে পক্ষপাতটি প্রাসঙ্গিক নয়। আপনি কেবল প্রতিটি নিউরনকে চালু বা বন্ধ করার জন্য কেবলমাত্র পরিপূর্ণ করতে চান want প্রশ্ন আপনাকে পুরানো আউটপুট স্তরটিতে খুব স্পষ্ট সংকেত ধরে নিতে অনুমতি দিয়েছে।

আমি=3একজন3হেজেডএনWজেডএনW=Σআমি=0আমি=9ওয়াটআমি*একজনআমিহে

ওয়াট3,0=-10
ওয়াট3,1=-10
ওয়াট3,2=+ +10
ওয়াট3,3=+ +10

এটি 0 0 1 1কেবলমাত্র "3" প্রতিনিধিত্ব করে পুরানো আউটপুট স্তরের নিউরন সক্রিয় থাকাকালীন আউটপুটের নিকটে স্পষ্টভাবে উত্পাদন করা উচিত । প্রশ্নে, আপনি পুরানো স্তরের প্রতিযোগী প্রতিযোগীদের জন্য একটি নিউরনের 0.99 এবং <0.01 সক্রিয়করণ ধরে নিতে পারেন। সুতরাং, আপনি যদি ওজন একই মাত্রা ব্যবহার করেন, তবে অপেক্ষাকৃত ছোট মানগুলি অন্যান্য পুরানো স্তর সক্রিয়করণ মান থেকে + -0.1 (0.01 * 10) থেকে আসা + -9.9 মানকে এবং নতুন স্তরের আউটপুটগুলিকে মারাত্মকভাবে প্রভাবিত করবে না 0 বা 1 এর খুব কাছে স্যাচুরেটেড হবে।


ধন্যবাদ. আমি এই অংশটি বেশ অনুধাবন করতে পারিনি, আপনি কি দয়া করে আরও বিশদ বিবরণ দিতে চান? - "আমার ওজনগুলি পুরানো আউটপুট i3 3, AOld3 থেকে নতুন আউটপুট জেডএনউজ-এর লগিটে যেতে পারে, যেখানে জেডএনভিজ = Σi = 9i = 0 উইজ ∗ আওল্ডি নিম্নরূপ: ডব্লু 3,0 = −10 ডাব 3,1 = −10 ডাব্লু 3 , 2 = + 10 ডাব্লু 3,3 = + 10 "
ভিক্টর ইপ

একজনআমি=(জেডআমি)

@ নীলস্ল্যাটার - আপনার উদাহরণের ওজনগুলি 3 আউটপুটগুলির জন্য কাজ করবে না? আমি দেখতে পাচ্ছি না যে তারা করবে। সম্প্রসারিত করুন. ধন্যবাদ।
ফুলস্ট্যাক

একজন3

1
@ আরআরজি ০: কারণ আমি আউটপুটে সিগময়েড স্তর ধরে নিচ্ছি, কারণ এটি বাইনারি শ্রেণিবদ্ধকরণ - বিটটি চালু বা বন্ধ রয়েছে। সুতরাং আপনার উদাহরণে আপনি sigmoid((0 * 10) * 1)যা পান 0.5। উপযুক্ত পরিমাণে বাছাই করে, আপনি সিগময়েডের আগে খুব উচ্চ বা নিম্ন আউটপুট নিশ্চিত করেন, যা তারপরে 0 বা 1 এর খুব কাছে চলে আসবে, ফুলস্ট্যাকের উত্তরে ধরে নেওয়া রৈখিক আউটপুট থেকে এটি আরও শক্তিশালী আইএমও, তবে এটিকে উপেক্ষা করে, মূলত আমাদের দুটি উত্তর একই।
নীল স্লেটার

4

শনিরপিআইয়ের নীচের কোডটি এই প্রশ্নের উত্তর দেয়। Https://saturnapi.com/artitw/neural-network-decimal-digits-to-binary-bitwise- রূপান্তর এ কোডটি দেখুন এবং চালান

% Welcome to Saturn's MATLAB-Octave API.
% Delete the sample code below these comments and write your own!

% Exercise from http://neuralnetworksanddeeplearning.com/chap1.html
% There is a way of determining the bitwise representation of a digit by adding an extra layer to the three-layer network above. The extra layer converts the output from the previous layer into a binary representation, as illustrated in the figure below. Find a set of weights and biases for the new output layer. Assume that the first 3 layers of neurons are such that the correct output in the third layer (i.e., the old output layer) has activation at least 0.99, and incorrect outputs have activation less than 0.01.

% Inputs from 3rd layer
xj = eye(10,10)

% Weights matrix
wj = [0 0 0 0 0 0 0 0 1 1 ;
      0 0 0 0 1 1 1 1 0 0 ;
      0 0 1 1 0 0 1 1 0 0 ;
      0 1 0 1 0 1 0 1 0 1 ]';

% Results
wj*xj


% Confirm results
integers = 0:9;
dec2bin(integers)

দ্রষ্টব্য যে এটি লিনিয়ার আউটপুট স্তরের জন্য ওজনের একটি সেট প্রয়োগ করে ments বিপরীতে, আমার উত্তর আউটপুট স্তর মধ্যে সিগময়েড অ্যাক্টিভেশন ধরে। অন্যথায় দুটি উত্তর সমান।
নিল স্লেটার

ইনপুট বলতে কী বোঝায় eye(10,10)?
Rrz0

হ্যাঁ, এটি প্রকৃতপক্ষে একটি কবিতার মতো কাজ করে, এটি কেবল অ্যাকটাভ অনলাইনে চেষ্টা করেছে এবং নিশ্চিত করেছে, ধন্যবাদ !! ... পিএস: কিছুটা হলেও ব্যাখ্যাটি ভাল হবে, কেউ আটকে থাকতে পারে :)
আনাক্সিম্যান্ড্রো অ্যান্ড্রেড

1
@ আরআরজে ০ এটি ম্যাট্রিক্স তৈরির জন্য একটি মতলব / অক্টাভ ফাংশন (মূল তিরোনামের মধ্যে কেবলমাত্র)
অ্যানাক্সিম্যান্ড্রো এন্ড্রেড

0

উপরের অনুশীলনের জন্য পাইথোনিক প্রমাণ:

"""
NEURAL NETWORKS AND DEEP LEARNING by Michael Nielsen

Chapter 1

http://neuralnetworksanddeeplearning.com/chap1.html#exercise_513527

Exercise:

There is a way of determining the bitwise representation of a digit by adding an extra layer to the three-layer network above. The extra layer converts the output from the previous layer into a binary representation, as illustrated in the figure below. Find a set of weights and biases for the new output layer. Assume that the first 3 layers of neurons are such that the correct output in the third layer (i.e., the old output layer) has activation at least 0.99, and incorrect outputs have activation less than 0.01.

"""
import numpy as np


def sigmoid(x):
    return(1/(1+np.exp(-x)))


def new_representation(activation_vector):
    a_0 = np.sum(w_0 * activation_vector)
    a_1 = np.sum(w_1 * activation_vector)
    a_2 = np.sum(w_2 * activation_vector)
    a_3 = np.sum(w_3 * activation_vector)

    return a_3, a_2, a_1, a_0


def new_repr_binary_vec(new_representation_vec):
    sigmoid_op = np.apply_along_axis(sigmoid, 0, new_representation_vec)
    return (sigmoid_op > 0.5).astype(int)


w_0 = np.full(10, -1, dtype=np.int8)
w_0[[1, 3, 5, 7, 9]] = 1
w_1 = np.full(10, -1, dtype=np.int8)
w_1[[2, 3, 6, 7]] = 1
w_2 = np.full(10, -1, dtype=np.int8)
w_2[[4, 5, 6, 7]] = 1
w_3 = np.full(10, -1, dtype=np.int8)
w_3[[8, 9]] = 1

activation_vec = np.full(10, 0.01, dtype=np.float)
# correct number is 5
activation_vec[3] = 0.99

new_representation_vec = new_representation(activation_vec)
print(new_representation_vec)
# (-1.04, 0.96, -1.0, 0.98)
print(new_repr_binary_vec(new_representation_vec))
# [0 1 0 1]

# if you wish to convert binary vector to int
b = new_repr_binary_vec(new_representation_vec)
print(b.dot(2**np.arange(b.size)[::-1]))
# 5

0

অক্টাভে ব্যবহার করে নীল স্লেটারের মন্তব্য সম্পর্কিত ফুলস্ট্যাকের জবাবে কিছুটা পরিবর্তন :

% gzanellato
% Octave

% 3rd layer:
A = eye(10,10);

% Weights matrix:

fprintf('\nSet of weights:\n\n')

wij = [-10 -10 -10 -10 -10 -10 -10 -10 10 10;
       -10 -10 -10 -10 10 10 10 10 -10 -10;
       -10 -10 10 10 -10 -10 10 10 -10 -10;
       -10 10 -10 10 -10 10 -10 10 -10 10]

% Any bias between -9.999.. and +9.999.. runs ok

bias=5

Z=wij*A+bias;

% Sigmoid function:

for j=1:10;
  for i=1:4;
    Sigma(i,j)=int32(1/(1+exp(-Z(i,j))));
  end
end

fprintf('\nBitwise representation of digits:\n\n')

disp(Sigma')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.