1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//! Модуль, реализующий функцию потерь Среднеквадратичной ошибки (MSE).
use crateTensor;
/// Вычисляет Среднеквадратичную ошибку (Mean Squared Error).
///
/// Эта функция потерь часто используется для задач регрессии.
///
/// Формула: `MSE = mean((y_pred - y_true)^2)`.
/// В данной реализации для простоты вычисляется сумма, а не среднее:
/// `sum((y_pred - y_true)^2)`. Для процесса оптимизации это эквивалентно,
/// так как константный множитель (1/N) влияет только на абсолютное значение
/// потерь, но не на направление градиента.
///
/// # Аргументы
///
/// * `y_pred` - Тензор с предсказаниями модели.
/// * `y_true` - Тензор с истинными значениями.
///
/// # Возвращает
///
/// Скалярный `Tensor` (0-мерный), содержащий значение ошибки.
///
/// # Примеры
///
/// ```
/// # use rusty_gradients::tensor::Tensor;
/// # use rusty_gradients::losses::mse_loss;
/// # use ndarray::array;
/// let predictions = Tensor::new(array![0.9, 0.1, 0.6].into_dyn(), true);
/// let targets = Tensor::new(array![1.0, 0.0, 0.5].into_dyn(), false);
///
/// let loss = mse_loss(&predictions, &targets);
///
/// // loss = (0.9-1.0)^2 + (0.1-0.0)^2 + (0.6-0.5)^2
/// // loss = (-0.1)^2 + (0.1)^2 + (0.1)^2
/// // loss = 0.01 + 0.01 + 0.01 = 0.03
/// assert!((loss.data.borrow().sum() - 0.03).abs() < 1e-6);
/// ```