Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Deep Learning — глубокое обучение
Deep Learning (DL) — это подраздел машинного обучения, основанный на искусственных нейронных сетях с множеством слоёв (отсюда слово «глубокое»). Это современный подход к автоматическому выявлению признаков из необработанных данных.
История и эволюция
1950s — Первые идеи о нейронных сетях (McCulloch-Pitts)
1990s — Backpropagation и многослойные сети (Rumelhart, Hinton)
2006 — Geoffrey Hinton: Deep Learning революция (успешное обучение глубоких сетей)
2012 — AlexNet побеждает на ImageNet, DL становится mainstream
2016 — AlphaGo (DeepMind) побеждает чемпиона по Go
2017 — Transformer архитектура (внимание — attention mechanism)
2022 — ChatGPT показывает силу больших языковых моделей
Основной строительный блок: Нейрон
import numpy as np
# Математика одного нейрона
def neuron(inputs, weights, bias):
# Linear combination: z = w1*x1 + w2*x2 + ... + wn*xn + b
z = np.dot(weights, inputs) + bias
# Activation function (ReLU)
output = max(0, z)
return output
# Пример
inputs = np.array([1.0, 2.0, 3.0])
weights = np.array([0.1, 0.2, 0.3])
bias = 0.5
output = neuron(inputs, weights, bias)
print(output) # 0.1*1 + 0.2*2 + 0.3*3 + 0.5 = 1.4
Архитектура: От простого к сложному
1. Fully Connected Neural Network (Dense)
import tensorflow as tf
from tensorflow import keras
# Простая нейронная сеть для классификации
model = keras.Sequential([
keras.layers.Dense(128, activation='relu', input_shape=(784,)), # Input layer
keras.layers.Dropout(0.2), # Regularization
keras.layers.Dense(64, activation='relu'), # Hidden layer 1
keras.layers.Dense(32, activation='relu'), # Hidden layer 2
keras.layers.Dense(10, activation='softmax') # Output layer (10 классов)
])
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
2. Convolutional Neural Network (CNN) — для изображений
# Для обработки изображений
model = keras.Sequential([
# Convolutional layers извлекают признаки
keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
keras.layers.MaxPooling2D((2, 2)),
keras.layers.Conv2D(64, (3, 3), activation='relu'),
keras.layers.MaxPooling2D((2, 2)),
keras.layers.Conv2D(64, (3, 3), activation='relu'),
# Flatten для полносвязного слоя
keras.layers.Flatten(),
keras.layers.Dense(64, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
# CNN значительно лучше для изображений, чем Dense сети
3. Recurrent Neural Network (RNN) — для последовательностей
# Для текста, временных рядов
model = keras.Sequential([
keras.layers.LSTM(128, input_shape=(timesteps, features), return_sequences=True),
keras.layers.LSTM(64),
keras.layers.Dense(32, activation='relu'),
keras.layers.Dense(1, activation='sigmoid') # Бинарная классификация
])
# LSTM (Long Short-Term Memory) помнит долгосрочные зависимости
Процесс обучения: Backpropagation
1. Forward pass: предсказание
Input → Hidden1 → Hidden2 → Output
2. Вычисление ошибки (loss)
loss = (predicted - actual)^2
3. Backward pass: распространение градиентов
Compute dL/dW для каждого слоя от выхода к входу
4. Update weights
W_new = W_old - learning_rate * dL/dW
# Пример с NumPy (упрощённо)
class SimpleNN:
def __init__(self, layer_sizes):
self.weights = [np.random.randn(layer_sizes[i], layer_sizes[i+1])
for i in range(len(layer_sizes)-1)]
self.biases = [np.zeros((1, s)) for s in layer_sizes[1:]]
def forward(self, X):
self.activations = [X]
A = X
for W, b in zip(self.weights, self.biases):
Z = np.dot(A, W) + b
A = np.maximum(0, Z) # ReLU
self.activations.append(A)
return A
def backward(self, y, learning_rate):
m = y.shape[0]
# Вычисляем градиенты и обновляем веса
# ...(сложные вычисления)
pass
Популярные архитектуры
ResNet (Residual Networks)
# Skip connections помогают обучать очень глубокие сети (100+ слоёв)
# x → Conv → ReLU → Conv → Add(x) → ReLU
# └──────────────────────────┘
Transformers — современный стандарт
# Attention mechanism вместо рекуррентности
model = keras.Sequential([
keras.layers.Embedding(vocab_size, embedding_dim),
keras.layers.MultiHeadAttention(...),
keras.layers.Dense(512, activation='relu'),
keras.layers.Dense(vocab_size, activation='softmax')
])
# GPT, BERT, T5 — основаны на Transformers
Практический пример: MNIST классификация
from tensorflow import keras
from tensorflow.keras import datasets
import numpy as np
# Загрузить данные
(X_train, y_train), (X_test, y_test) = datasets.mnist.load_data()
# Нормализация
X_train = X_train.astype('float32') / 255.0
X_test = X_test.astype('float32') / 255.0
# Построить модель
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dropout(0.2),
keras.layers.Dense(64, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# Обучение
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_split=0.1)
# Оценка
loss, accuracy = model.evaluate(X_test, y_test)
print(f'Accuracy: {accuracy*100:.2f}%') # ~97% на MNIST
Ключевые концепции
1. Activation Functions
- ReLU: max(0, x) — самая популярная
- Sigmoid: 1/(1+e^-x) — для бинарной классификации
- Tanh: (e^x - e^-x)/(e^x + e^-x) — для скрытых слоёв
- Softmax: для многоклассовой классификации
2. Loss Functions
- MSE (Mean Squared Error): для регрессии
- CrossEntropy: для классификации
- Focal Loss: для несбалансированных данных
3. Optimizers
- SGD: базовый
- Adam: адаптивный learning rate (самый популярный)
- RMSprop: хороший для RNN
4. Регуляризация
- Dropout: случайно отключать нейроны
- L1/L2 Regularization: штраф за большие веса
- Batch Normalization: нормализовать входы каждого слоя
Применение Deep Learning
✅ Computer Vision: классификация, детекция, сегментация ✅ Natural Language Processing: машинный перевод, генерация текста ✅ Speech Recognition: распознавание речи ✅ Recommender Systems: рекомендации ✅ Game Playing: AlphaGo, AlphaZero ✅ Protein Folding: AlphaFold предсказывает структуру белков
Современные фреймворки
# TensorFlow / Keras — самый популярный
import tensorflow as tf
# PyTorch — любимец исследователей
import torch
# JAX — для научных вычислений
import jax
Вызовы Deep Learning
⚠️ Требует много данных — обучение работает лучше с миллионами примеров ⚠️ Требует GPU — обучение медленное на CPU ⚠️ Black box — сложно объяснить решения (интерпретируемость) ⚠️ Переобучение — модель может запомнить вместо обобщения ⚠️ Дорого — вычисления и электричество
Итоги
Deep Learning — это мощный инструмент для решения сложных задач, где нет явных правил. Он произвел революцию в:
- Компьютерном зрении
- Обработке естественного языка
- Рекомендательных системах
Для Python разработчика важно понимать базовые концепции, но основная работа — это инженерия данных, параллелизм и развёртывание моделей в production.