Реалізація Одного Нейрона
Нейрон — це базова обчислювальна одиниця нейронної мережі. Він обробляє декілька вхідних даних та генерує один вихід, що дозволяє мережі навчатися та робити передбачення.
У цьому прикладі мета — побудувати нейронну мережу з одним нейроном. Вона буде використовуватися для завдання бінарної класифікації, наприклад, для виявлення спаму, де 0 відповідає звичайному (не-спам) електронному листу, а 1 — спам-листу.
Нейрон отримує на вхід числові ознаки, виділені з електронних листів, і формує вихід у діапазоні від 0 до 1, що відображає ймовірність того, що лист є спамом.
Покроково відбувається наступне:
- Кожен вхід множиться на відповідну вагу; ваги — це параметри, що навчаються, які визначають важливість кожного входу;
- Усі зважені входи підсумовуються;
- До суми входів додається зміщення (bias), що дозволяє нейрону зміщувати свій вихід і забезпечує додаткову гнучкість моделі;
- Сума передається через функцію активації. Оскільки один нейрон безпосередньо формує фінальний вихід (ймовірність), використовується сигмоїдна функція, яка стискає значення у діапазон (0,1).
Зсув (bias) нейрона також є параметром, що підлягає навчанню.
Клас Neuron
Нейрон повинен зберігати свої ваги та зсув (bias), тому клас є природним способом об'єднання цих пов'язаних властивостей.
Хоча цей клас не буде частиною фінальної реалізації нейронної мережі, він ефективно ілюструє ключові принципи.
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
Функції активації
Формула для сигмоїдної функції виглядає наступним чином, де z — це зважена сума вхідних значень з доданим зсувом (сире вихідне значення) для цього нейрона:
σ(z)=1+e−z1Використовуючи цю формулу, сигмоїду можна реалізувати як просту функцію на Python:
def sigmoid(z):
return 1 / (1 + np.exp(-z))
Формула для функції ReLU виглядає наступним чином: вона встановлює вихідне значення рівним z, якщо воно додатне, і 0 в іншому випадку:
ReLU(z)=max(0,z)def relu(z):
return np.maximum(0, z)
1. Яка роль зміщення (bias) в одному нейроні?
2. Чому ваги ініціалізують малими випадковими значеннями, а не нулями?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 4
Реалізація Одного Нейрона
Свайпніть щоб показати меню
Нейрон — це базова обчислювальна одиниця нейронної мережі. Він обробляє декілька вхідних даних та генерує один вихід, що дозволяє мережі навчатися та робити передбачення.
У цьому прикладі мета — побудувати нейронну мережу з одним нейроном. Вона буде використовуватися для завдання бінарної класифікації, наприклад, для виявлення спаму, де 0 відповідає звичайному (не-спам) електронному листу, а 1 — спам-листу.
Нейрон отримує на вхід числові ознаки, виділені з електронних листів, і формує вихід у діапазоні від 0 до 1, що відображає ймовірність того, що лист є спамом.
Покроково відбувається наступне:
- Кожен вхід множиться на відповідну вагу; ваги — це параметри, що навчаються, які визначають важливість кожного входу;
- Усі зважені входи підсумовуються;
- До суми входів додається зміщення (bias), що дозволяє нейрону зміщувати свій вихід і забезпечує додаткову гнучкість моделі;
- Сума передається через функцію активації. Оскільки один нейрон безпосередньо формує фінальний вихід (ймовірність), використовується сигмоїдна функція, яка стискає значення у діапазон (0,1).
Зсув (bias) нейрона також є параметром, що підлягає навчанню.
Клас Neuron
Нейрон повинен зберігати свої ваги та зсув (bias), тому клас є природним способом об'єднання цих пов'язаних властивостей.
Хоча цей клас не буде частиною фінальної реалізації нейронної мережі, він ефективно ілюструє ключові принципи.
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
Функції активації
Формула для сигмоїдної функції виглядає наступним чином, де z — це зважена сума вхідних значень з доданим зсувом (сире вихідне значення) для цього нейрона:
σ(z)=1+e−z1Використовуючи цю формулу, сигмоїду можна реалізувати як просту функцію на Python:
def sigmoid(z):
return 1 / (1 + np.exp(-z))
Формула для функції ReLU виглядає наступним чином: вона встановлює вихідне значення рівним z, якщо воно додатне, і 0 в іншому випадку:
ReLU(z)=max(0,z)def relu(z):
return np.maximum(0, z)
1. Яка роль зміщення (bias) в одному нейроні?
2. Чому ваги ініціалізують малими випадковими значеннями, а не нулями?
Дякуємо за ваш відгук!