Додатковий вихідний рівень у нейронній мережі (десяткові до двійковій)


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

Оскільки старий вихідний шар має просту форму, цього досягти досить просто. Кожен вихідний нейрон повинен мати позитивну вагу між собою та вихідними нейронами, які повинні бути представлені ним, і негативну вагу між собою та вихідними нейронами, які слід вимкнути. Значення мають поєднуватися з великими розмірами, щоб чітко включати чи вимикати, тому я використовував би великі ваги, такі як +10 та -10.

Якщо у вас тут активація сигмоїдів, зміщення не є таким актуальним. Ви просто хочете просто наситити кожен нейрон увімкнено або вимкнено. Питання дозволило приймати дуже чіткі сигнали у старому вихідному шарі.

i=3А3ОлгZjNешZjNеш=Σi=0i=9WijАiОлг

W3,0=-10
W3,1=-10
W3,2=+10
W3,3=+10

Це повинно чітко створювати близький до 0 0 1 1вихідного, коли активний лише нейрон старого шару вихідного шару, що представляє "3". У запитанні ви можете припустити активацію одного нейрона і 0,99 для конкуруючих у старому шарі. Отже, якщо ви використовуєте однакову величину ваг протягом усього часу, то відносно невеликі значення, що надходять від + -0,1 (0,01 * 10) від інших значень активації іншого старого шару, не матимуть серйозного впливу на значення + -9,9, а на результати нового шару буде насиченим дуже близько до 0 або 1.


Дякую. Я не міг повністю дотримуватися цієї частини, чи не заперечуєте ви детальніше розробити далі? - "У мене можуть бути ваги від активації старого виходу i = 3, AOld3 до логітування нових виходів ZNewj, де ZNewj = Σi = 9i = 0Wij ∗ AOldi наступним чином: W3,0 = −10 W3,1 = −10 W3 , 2 = + 10 W3,3 = + 10 "
Віктор Іп

Аi=f(Zi)f

@NeilSlater - чи будуть ваші приклади ваги працювати для результатів, які не є 3? Я не бачу, що вони будуть. Будь ласка, докладно. Спасибі.
FullStack

А3олг

1
@ Rrz0: Тому що я припускаю сигмоїдний шар на виході, оскільки це двійкова класифікація - біт або вмикається, або вимикається. Отже, у вашому прикладі ви отримуєте sigmoid((0 * 10) * 1)0,5. Вибираючи відповідно великі числа, ви забезпечуєте або дуже високий, або низький вихід перед сигмоїдом, який потім виведе дуже близький до 0 або 1. Це більш надійний ІМО, ніж лінійний вихід, який передбачається у відповіді FullStack, але ігноруючи це, по суті, наше дві відповіді однакові.
Ніл Слейтер

4

Код нижче від SaturnAPI відповідає на це питання. Переглянути та запустити код на https://saturnapi.com/artitw/neural-network-decimal-digits-to-binary-bitwise-conversion

% 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)

Зауважте, що це реалізує набір ваг для лінійного вихідного шару. Навпаки, моя відповідь передбачає активацію сигмоїдів у вихідному шарі. Інакше дві відповіді рівнозначні.
Ніл Слейтер

Що означає вхідні дані eye(10,10)?
Rrz0

так, це справді працює як шарм, просто спробував це в Octave Online і підтвердив, дякую !! ... PS: Трохи про пояснення також було б добре, якщо хтось застрягне :)
Анаксимандро Андраде

1
@ Rrz0 - це функція Matlab / Octave для створення матриці ідентичності (лише з основними діагоналями)
Anaximandro Andrade

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

Невелика зміна відповіді FullStack щодо коментарів Ніла Слейтера за допомогою Octave:

% 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')
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.