Шари Перцептрона
Свайпніть щоб показати меню
Перцептрон — це найпростіша нейронна мережа, що складається лише з одного нейрона. Для складніших завдань використовується багатошаровий перцептрон (MLP), який містить один або декілька прихованих шарів, що дозволяють мережі вивчати складніші закономірності.
MLP складається з:
- Вхідний шар — отримує дані;
- Приховані шари — виділяють закономірності;
- Вихідний шар — формує передбачення.
Кожен шар містить декілька нейронів; вихід одного шару стає входом для наступного.
Ваги та зсуви шару
Раніше нейрон зберігав свої ваги у вигляді вектора, а зсув — як скаляр. Однак шар містить багато нейронів, тому його ваги стають матрицею, де кожен рядок містить ваги одного нейрона. Зсуви для всіх нейронів утворюють вектор.
Для шару з 3 входами та 2 нейронами:
W=[W11W21W12W22W13W23],b=[b1b2]Тут Wij — вага від j-го входу до i-го нейрона; bi — зсув нейрона i.
Пряме поширення
Пряме поширення активує кожен нейрон шляхом обчислення зваженої суми, додавання зсуву та застосування функції активації.
Раніше один нейрон використовував:
[ z = W \cdot x + b ]
Тепер, оскільки кожен рядок (W) є вектором ваг одного нейрона, виконання матричного множення між матрицею ваг і вектором вхідних даних автоматично обчислює зважені суми для всіх нейронів одночасно.
Щоб додати зсуви до виходів відповідних нейронів, також слід додати вектор зсувів:
Нарешті, до результату застосовується функція активації — sigmoid або ReLU у нашому випадку. Підсумкова формула для прямого поширення у шарі виглядає так:
a=activation(Wx+b)де a — вектор активацій нейронів (виходів).
Клас Layer
Оскільки багатошарові перцептрони складаються з шарів, визначається окремий клас Layer. Його атрибути:
inputs: вектор вхідних даних (елементівn_inputs);outputs: необроблені виходи нейронів (елементівn_neurons);weights: матриця ваг;biases: вектор зсувів;activation_function: функція активації, що використовується в шарі.
Ваги та зсуви ініціалізуються випадковими значеннями з рівномірного розподілу в інтервалі ([-1, 1]). inputs і outputs ініціалізуються як масиви NumPy, заповнені нулями, для забезпечення узгоджених розмірів під час подальшого зворотного поширення.
class Layer:
def __init__(self, n_inputs, n_neurons, activation_function):
self.inputs = np.zeros((n_inputs, 1))
self.outputs = np.zeros((n_neurons, 1))
self.weights = ...
self.biases = ...
self.activation = activation_function
Ініціалізація inputs і outputs нулями запобігає помилкам розмірності та забезпечує узгодженість шарів під час прямого та зворотного проходів.
Метод Forward
Пряме поширення для шару обчислює необроблені виходи та застосовує активацію:
def forward(self, inputs):
self.inputs = np.array(inputs).reshape(-1, 1)
# Raw outputs: weighted sum + bias
self.outputs = ...
# Apply activation
return ...
Перетворення вхідних даних у стовпчиковий вектор гарантує правильне множення з матрицею ваг і відповідність очікуваним розмірам у всій мережі.
1. Що робить багатошаровий перцептрон (MLP) потужнішим за простий перцептрон?
2. Чому необхідно застосовувати цей код перед множенням inputs на матрицю ваг?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат