Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Реалізація Одного Нейрона | Нейронна Мережа з Нуля
Вступ до нейронних мереж

bookРеалізація Одного Нейрона

Note
Визначення

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

У цьому прикладі мета — побудувати нейронну мережу з одним нейроном. Вона буде використовуватися для завдання бінарної класифікації, наприклад, для виявлення спаму, де 0 відповідає звичайному (не-спам) електронному листу, а 1спам-листу.

Нейрон отримує на вхід числові ознаки, виділені з електронних листів, і формує вихід у діапазоні від 0 до 1, що відображає ймовірність того, що лист є спамом.

Покроково відбувається наступне:

  1. Кожен вхід множиться на відповідну вагу; ваги — це параметри, що навчаються, які визначають важливість кожного входу;
  2. Усі зважені входи підсумовуються;
  3. До суми входів додається зміщення (bias), що дозволяє нейрону зміщувати свій вихід і забезпечує додаткову гнучкість моделі;
  4. Сума передається через функцію активації. Оскільки один нейрон безпосередньо формує фінальний вихід (ймовірність), використовується сигмоїдна функція, яка стискає значення у діапазон (0,1)(0, 1).
Note
Примітка

Зсув (bias) нейрона також є параметром, що підлягає навчанню.

Клас Neuron

Нейрон повинен зберігати свої ваги та зсув (bias), тому клас є природним способом об'єднання цих пов'язаних властивостей.

Note
Примітка

Хоча цей клас не буде частиною фінальної реалізації нейронної мережі, він ефективно ілюструє ключові принципи.

class Neuron:
    def __init__(self, n_inputs):  
        self.weights = ...
        self.bias = ...
  • weights: список випадково ініціалізованих значень, які визначають важливість кожного входу (n_inputs — кількість входів) для нейрона;
  • bias: випадково ініціалізоване значення, що допомагає нейрону приймати гнучкі рішення.

Ваги та зсув повинні бути випадково ініціалізовані малими значеннями в діапазоні від -1 до 1, взятими з рівномірного розподілу, щоб порушити симетрію та забезпечити навчання різних ознак різними нейронами.

Для підсумку, NumPy надає функцію random.uniform(), яка генерує випадкове число або масив (за допомогою аргументу size) випадкових чисел з рівномірного розподілу в межах діапазону [low, high).

import numpy as np

np.random.uniform(low, high, size=...)

Пряме поширення (Forward Propagation)

Клас Neuron повинен містити метод activate(), який обчислює зважену суму входів, а потім застосовує функцію активації (у цьому випадку — сигмоїдну функцію).

Коли доступні два вектори однакової довжини — weights та inputs, зважену суму можна ефективно обчислити за допомогою скалярного добутку цих векторів.

Це дозволяє обчислити зважену суму в одному рядку коду за допомогою функції numpy.dot(), що усуває необхідність у циклі. Зсув потім можна безпосередньо додати до результату, щоб отримати input_sum_with_bias. Вихід обчислюється шляхом застосування сигмоїдної функції активації:

def activate(self, inputs):
    input_sum_with_bias = ...
    output = ...

    return output

Функції активації

Формула для сигмоїдної функції виглядає наступним чином, де zz — це зважена сума вхідних значень з доданим зсувом (сире вихідне значення) для цього нейрона:

σ(z)=11+ez\sigma(z) = \frac1{1 + e^{-z}}

Використовуючи цю формулу, сигмоїду можна реалізувати як просту функцію на Python:

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

Формула для функції ReLU виглядає наступним чином: вона встановлює вихідне значення рівним zz, якщо воно додатне, і 0 в іншому випадку:

ReLU(z)=max(0,z)ReLU(z) = max(0, z)
def relu(z):
    return np.maximum(0, z)

1. Яка роль зміщення (bias) в одному нейроні?

2. Чому ваги ініціалізують малими випадковими значеннями, а не нулями?

question mark

Яка роль зміщення (bias) в одному нейроні?

Select the correct answer

question mark

Чому ваги ініціалізують малими випадковими значеннями, а не нулями?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 1

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 4

bookРеалізація Одного Нейрона

Свайпніть щоб показати меню

Note
Визначення

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

У цьому прикладі мета — побудувати нейронну мережу з одним нейроном. Вона буде використовуватися для завдання бінарної класифікації, наприклад, для виявлення спаму, де 0 відповідає звичайному (не-спам) електронному листу, а 1спам-листу.

Нейрон отримує на вхід числові ознаки, виділені з електронних листів, і формує вихід у діапазоні від 0 до 1, що відображає ймовірність того, що лист є спамом.

Покроково відбувається наступне:

  1. Кожен вхід множиться на відповідну вагу; ваги — це параметри, що навчаються, які визначають важливість кожного входу;
  2. Усі зважені входи підсумовуються;
  3. До суми входів додається зміщення (bias), що дозволяє нейрону зміщувати свій вихід і забезпечує додаткову гнучкість моделі;
  4. Сума передається через функцію активації. Оскільки один нейрон безпосередньо формує фінальний вихід (ймовірність), використовується сигмоїдна функція, яка стискає значення у діапазон (0,1)(0, 1).
Note
Примітка

Зсув (bias) нейрона також є параметром, що підлягає навчанню.

Клас Neuron

Нейрон повинен зберігати свої ваги та зсув (bias), тому клас є природним способом об'єднання цих пов'язаних властивостей.

Note
Примітка

Хоча цей клас не буде частиною фінальної реалізації нейронної мережі, він ефективно ілюструє ключові принципи.

class Neuron:
    def __init__(self, n_inputs):  
        self.weights = ...
        self.bias = ...
  • weights: список випадково ініціалізованих значень, які визначають важливість кожного входу (n_inputs — кількість входів) для нейрона;
  • bias: випадково ініціалізоване значення, що допомагає нейрону приймати гнучкі рішення.

Ваги та зсув повинні бути випадково ініціалізовані малими значеннями в діапазоні від -1 до 1, взятими з рівномірного розподілу, щоб порушити симетрію та забезпечити навчання різних ознак різними нейронами.

Для підсумку, NumPy надає функцію random.uniform(), яка генерує випадкове число або масив (за допомогою аргументу size) випадкових чисел з рівномірного розподілу в межах діапазону [low, high).

import numpy as np

np.random.uniform(low, high, size=...)

Пряме поширення (Forward Propagation)

Клас Neuron повинен містити метод activate(), який обчислює зважену суму входів, а потім застосовує функцію активації (у цьому випадку — сигмоїдну функцію).

Коли доступні два вектори однакової довжини — weights та inputs, зважену суму можна ефективно обчислити за допомогою скалярного добутку цих векторів.

Це дозволяє обчислити зважену суму в одному рядку коду за допомогою функції numpy.dot(), що усуває необхідність у циклі. Зсув потім можна безпосередньо додати до результату, щоб отримати input_sum_with_bias. Вихід обчислюється шляхом застосування сигмоїдної функції активації:

def activate(self, inputs):
    input_sum_with_bias = ...
    output = ...

    return output

Функції активації

Формула для сигмоїдної функції виглядає наступним чином, де zz — це зважена сума вхідних значень з доданим зсувом (сире вихідне значення) для цього нейрона:

σ(z)=11+ez\sigma(z) = \frac1{1 + e^{-z}}

Використовуючи цю формулу, сигмоїду можна реалізувати як просту функцію на Python:

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

Формула для функції ReLU виглядає наступним чином: вона встановлює вихідне значення рівним zz, якщо воно додатне, і 0 в іншому випадку:

ReLU(z)=max(0,z)ReLU(z) = max(0, z)
def relu(z):
    return np.maximum(0, z)

1. Яка роль зміщення (bias) в одному нейроні?

2. Чому ваги ініціалізують малими випадковими значеннями, а не нулями?

question mark

Яка роль зміщення (bias) в одному нейроні?

Select the correct answer

question mark

Чому ваги ініціалізують малими випадковими значеннями, а не нулями?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 1
some-alt