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

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

Note
Визначення

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

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

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

Ось як це відбувається крок за кроком:

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

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

Клас Neuron

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

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=...)

Пряме поширення

Крім того, клас 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

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

Suggested prompts:

Can you show me how to complete the Neuron class with random initialization?

How does the activate method work in practice?

Can you explain why we use the sigmoid function for binary classification?

Awesome!

Completion rate improved to 4

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

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

Note
Визначення

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

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

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

Ось як це відбувається крок за кроком:

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

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

Клас Neuron

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

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=...)

Пряме поширення

Крім того, клас 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