np.random.seed(42)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
# Инициализация параметров
theta = np.random.randn(2, 1)
# Добавление столбца единиц к X (для смещения)
X_b = np.c_[np.ones((100, 1)), X]
# Параметры градиентного спуска
learning_rate = 0.1
n_iterations = 1000
m = len(X_b)
# Функция для вычисления градиентов
def compute_gradient(X_b, y, theta):
gradients = 2/m * X_b.T.dot(X_b.dot(theta) – y)
return gradients
# Градиентный спуск
for iteration in range(n_iterations):
gradients = compute_gradient(X_b, y, theta)
theta = theta – learning_rate * gradients
print("Найденные параметры:", theta)
# Визуализация результатов
plt.scatter(X, y)
plt.plot(X, X_b.dot(theta), color='red')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Линейная регрессия с использованием градиентного спуска')
plt.show()
```
Объяснение кода
1. Генерация данных:
– Мы генерируем случайные точки для переменной X, и соответствующие значения y, используя линейную зависимость с добавлением шума. Это симулирует реальные данные, которые мы хотим аппроксимировать с помощью линейной регрессии.
2. Инициализация параметров:
– Параметры модели (веса) инициализируются случайными значениями.
3. Добавление столбца единиц:
– К матрице X добавляется столбец единиц, чтобы учесть смещение (константный член) в линейной модели.
4. Параметры градиентного спуска:
– Устанавливаются параметры обучения, такие как скорость обучения (learning rate) и количество итераций (n_iterations).
5. Функция для вычисления градиентов:
– В этой функции вычисляются градиенты функции потерь по отношению к параметрам модели. Градиенты показывают, в каком направлении и насколько нужно изменить параметры, чтобы уменьшить ошибку.
6. Градиентный спуск:
– В цикле на каждой итерации вычисляются градиенты, и параметры модели обновляются в направлении, противоположном градиентам. Это повторяется до тех пор, пока параметры не будут оптимизированы.
7. Визуализация результатов:
– После завершения градиентного спуска результаты визуализируются. Исходные данные отображаются в виде точек, а линия регрессии, найденная методом градиентного спуска, отображается красной линией.
Этот код демонстрирует основные этапы градиентного спуска и показывает, как можно использовать этот метод для нахождения оптимальных параметров модели линейной регрессии.
Обратное распространение ошибки (backpropagation) – это ключевой алгоритм для обучения многослойных нейронных сетей. Этот метод позволяет эффективно вычислять градиенты функции потерь по отношению к каждому параметру сети, что необходимо для их последующего обновления. Весь процесс состоит из нескольких этапов: прямое распространение, вычисление функции потерь, обратное распространение и обновление параметров.
1. Прямое распространение
На этапе прямого распространения входные данные проходят через все слои