Forwarded from Love. Death. Transformers.
- так и че ты дум чат жпт нас всех убьет не
- аэээм бляяя юр тут как бы две стороны есть
- а программисты с ними че будет м
- нууу смотря какие тип там крутые или не оч там с опытом без
- а вот другие профессии чат жпт с ними что сделает а
- да тут яхззз на самом деле оно как то всегда само там разруливается
- оке я пон тя. в чем сила
- в любви
- аэээм бляяя юр тут как бы две стороны есть
- а программисты с ними че будет м
- нууу смотря какие тип там крутые или не оч там с опытом без
- а вот другие профессии чат жпт с ними что сделает а
- да тут яхззз на самом деле оно как то всегда само там разруливается
- оке я пон тя. в чем сила
- в любви
Друзья, сегодня пост, начинайте ждать ⌛️
Please open Telegram to view this post
VIEW IN TELEGRAM
def risk(w, x, y):
y_hat = predict(w, x) # считаем предсказания: S @ w
n = len(x) # количество точек (должно равняться len(y))
return (1.0 / n) * np.sum((y_hat - y) ** 2) # MSE
y_hat = predict(w, x)
x = [0, 1, 2]
ones_like = [1, 1, 1]
x**2 = [0, 1, 4]
x**3 = [0, 1, 8]
S = stack(ones, x, x**2, x**3, axis=1) =
[[1, 0, 0, 0],
[1, 1, 1, 1],
[1, 2, 4, 8]] # shape (3, 4) - форма массива
w = [1, 2, 0, 0] # shape (4,)
Предсказания равны:
y_hat = [1, 3, 5] # shape (3,)
func(0) = 0.1*0 - sin(0) + 5 = 5.00000
func(1) = 0.1*1 - sin(1) + 5 ≈ 0.1 - 0.84147 + 5 = 4.25853
func(2) = 0.1*4 - sin(2) + 5 ≈ 0.4 - 0.90930 + 5 = 4.49070
y ≈ [5.00000, 4.25853, 4.49070]
Ошибка e = y_hat - y ≈ [1-5, 3-4.25853, 5-4.49070] ≈ [-4.00000, -1.25853, 0.50930]
Квадраты: e**2 ≈ [16.00000, 1.5839, 0.2594]
Сумма: ≈ 16 + 1.5839 + 0.2594 = 17.8433
Среднее (делим на n=3): Q ≈ 17.8433 / 3 ≈ 5.9478
Please open Telegram to view this post
VIEW IN TELEGRAM
Друзья, занимался делами, теперь допишем пост для кода:
🧑💻 На данный момент наш код выглядит как-то так:
🟢 Давайте еще раз быстро пробежимся и закончим:
🔵 Функция? — Есть, за нее отвечает функция func()
🔵 Признаки мы тоже предусмотрели, за нее отвечает функция features(), входные признаки мы преобразовываем в numpy массив, и возвращаем матрицу признаков S (в матрице у нас столбец единиц — для bias, x, x², x³ ), короче говоря, features превращала каждый скаляр xᵢ в вектор признаков в вектор признаков.
🔵 Теперь нужна функция для прогноза — predict(). Функция вычисляет 🟰 a(x) = Sw 🟰 — по сути, умножение нашей матрицы S (переменной мы присваиваем значение матрицу) на вектор признаков w.
🔵 Теперь функция risk() — возвращает по-сути MSE — среднеквадратическая между предсказаниями и истинными значениями. Здесь подаем в функцию аж 3 аргумента — w (параметры модели, и это единственное, что мы меняем, risk() будет зависеть от w ⏺ x (входные данные по которым мы считаем признаки) и делаем предсказания y_hat — это вектор предсказаний (результат матричного умножения S @ w) ⏺ y — это истинные значения. Логика примерно такая: минимизируем функцию потерь по w, а x, y — это данные.
import numpy as np
def func(x):
return 0.1 * x ** 2 - np.sin(x) + 5
def features(x):
x = np.asarray(x)
return np.stack([np.ones_like(x), x, x ** 2, x ** 3], axis = 1)
def predict(w, x):
S = features(x)
return S @ w
def risk(w, x, y):
y_hat = predict(w, x)
n = len(x)
return (1.0 / n) * np.sum((y_hat - y) ** 2)
Please open Telegram to view this post
VIEW IN TELEGRAM
grad_risk() сам себя не разберет def grad_risk(w, x, y):
S = features(x)
err = S @ w - y
n = len(x)
return (2.0 / n) * (S.T @ err)
S = features(x)🟰; 🟰y_hat = S @ w🟰 return (2.0 / n) * (S.T @ err) np.linspace(-5, 5, 100, endpoint=False) y = 0.1*x^2 - sin(x) + 5 coord_x = np.arange(-5.0, 5.0, 0.1)
coord_y = func(coord_x)
sz = len(coord_x) # это просто 100
eta = np.array([0.1, 0.01, 0.001, 0.0001])
w = np.array([0., 0., 0., 0.])
N = 200
for _ in range(N):
g = grad_risk(w, coord_x, coord_y)
w = w - eta * g
Q = risk(w, coord_x, coord_y)
w = list(w)
Такие вот дела
Please open Telegram to view this post
VIEW IN TELEGRAM
🔵 Здесь два вида — вещественные (могут принимать любое значение в диапазоне) и целочисленные (принимают только целые значения). Численные признаки мы используем постоянно в задачах регрессии. Если приводить пример с визуализацией, гистограмма как раз про численные признаки, столбчатая диаграмма — для категориальных
🔵 При работе с такими данными, используют one-hot encoding (метод преобразования категориальных данных (городов, цветов, профессий) в числовой формат, понятный алгоритмам машинного обучения) — превращают в набор бинарных признаков
Пол: «мужской» / «женский»
Наличие подписки: «да» / «нет»
Результат теста: «успех» / «провал»
Включение функции: 1 / 0
🔵 Бинарные признаки можно обрабатывать как численные (например, усреднять — тогда получим долю "1"), так и как категориальные. Часто их оставляют как есть (0 и 1), особенно в моделях машинного обучения.
Курс студента: 1, 2, 3, 4, 5
Please open Telegram to view this post
VIEW IN TELEGRAM
🔵 Персептрон — это базовый алгоритм машинного обучения, придуманный в 1957 году Фрэнком Розенблаттом. Если поточнее, то это классический метод контролируемого обучения для бинарной классификации. Его часто называют «прародителем нейронных сетей».🔵 Проще говоря, это простейший искусственный нейрон, который 'умеет' cмотреть на данные, например, признаки, складывать их с весами и смещением, и конечно же, выдавать предсказания (0 или 1). Если вы хорошо вспомните, мы уже решали задачи линейной бинарной классификации, так вот, это оно и есть. Напомню, что суть была в проведении прямой, которая будет разделять наши данные на 2 класса. Персептрон будет искать такую прямую, которая будет разделять наши данные правильно.🔵 Суть метода проста: у нас есть веса и смещение➡️ считаем оценку➡️ делаем прогноз➡️ если оценка ≥ 0 → класс 1, если < 0 → класс 0➡️ сравниваем с реальными значениями➡️ если предсказал верно, значит все гуд➡️ если нет, то толкаем или отталкиваем гиперплоскость в зависимости от класса➡️ повторяем, пока не разделим данные
Стохастический градиентный спуск (SGD) — алгоритм оптимизации в машинном обучении, который корректирует внутренние параметры моделей (веса, смещения) для минимизации функции потерь. В отличие от традиционного градиентного спуска, который обрабатывает весь набор данных для каждого обновления, SGD обновляет параметры, используя только одну случайно выбранную обучающую выборку.
from matplotlib import pyplot as plt
import numpy as np
import random
import utils # Файл с нашим визуалом
features = np.array([[1,0],[0,2],[1,1],[1,2],[1,3],[2,2],[2,3],[3,2]])
labels = np.array([0,0,0,0,1,1,1,1])
# utils.plot_points(features, labels)
def score(weights, bias, features):
return features.dot(weights) + bias
‼️ Как я уже сказал,🔵 features — это наши входные данные. Это может быть что угодно: вес человека или [2, 3] как координаты.🔵 Веса модели — weight — это параметры модели, их персептрон и учится подбирать. Они показывают, насколько важен каждый признак (по формуле мы умножаем w * x). Если большой положительный вес — признак тянет решение в сторону класса 1, и наоборот.🔵 bias — это смещение (свободный член). А отвечает он за то, где именно проходит разделяющая граница. Без bias прямая всегда проходила бы через начало координат, а bias позволяет её сдвигать вверх/вниз/в сторону.
Ну и само собой, первая функция считает линейную комбинацию w1*x1 + w2*x2 + bias
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Forbes Russia
OpenAI подписала с Oracle контракт на покупку вычислительных мощностей для развития ИИ на $300 млрд, сообщает WSJ со ссылкой на источники. Сделка сроком на 5 лет стала одним из крупнейших когда-либо подписанных контрактов в сфере облачных вычислений. По оценке WSJ, для обеих компаний это «рискованная авантюра». По данным глобального рейтинга Forbes, 10 сентября сооснователь Oracle Ларри Эллисон стал вторым после Илона Маска миллиардером в истории, состояние которого превысило $400 млрд
Please open Telegram to view this post
VIEW IN TELEGRAM
‼️ Если представить, что у нас 2 признака (x₁ и x₂): веса (это w) будут определять наклон прямой. bias(b) — расположение прямой, features(это координаты x) — это просто точка, которую мы проверяем, по какую сторону прямой она лежит.📱 В общем, def score() — функция для вычисления линейной комбинации признаков, на выходе просто получаем любое вещественное число, если очень коротко, это сырая оценка нашей модели (насколько сильно точка тянет в сторону класса 1 или 0)
def step(x):
if x >= 0:
return 1
else:
return 0
📱 То есть, берем входные (фичи, веса и смещение)➡️ сначала вызывается функция score(), возвращает она число (где точка относительно линии)➡️ это число сразу же подается в step(), которая возвращает 0 или 1➡️ prediction() возвращает результат как итоговое предсказание.
def prediction(weights, bias, features):
return step(score(weights, bias, features))
def error(weights, bias, features, label):
pred = prediction(weights, bias, features)
if pred == label:
return 0
else:
return np.abs(score(weights, bias, features))
pred = prediction(weights, bias, features) — Для начала, модель делает предсказания для точки (это функция выше: 0 ил 1).if pred == label: — Сравниваем предсказание с настоящей меткой label (label была выше)return np.abs(score(weights, bias, features)) — Берем по модулюfrom matplotlib import pyplot as plt
import numpy as np
import random
import utils
features = np.array([[1,0],[0,2],[1,1],[1,2],[1,3],[2,2],[2,3],[3,2]])
labels = np.array([0,0,0,0,1,1,1,1])
utils.plot_points(features, labels)
def score(weights, bias, features):
return features.dot(weights) + bias
def step(x):
if x >= 0:
return 1
else:
return 0
def prediction(weights, bias, features):
return step(score(weights, bias, features))
def error(weights, bias, features, label):
pred = prediction(weights, bias, features)
if pred == label:
return 0
else:
return np.abs(score(weights, bias, features))
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Бэкдор
This media is not supported in your browser
VIEW IN TELEGRAM
Открываем ЛЮБЫЕ домофоны с ChatGPT — нейронка поможет попасть в подъезд, если вы случайно забыли ключи.
Все просто:
1️⃣ Показываем нейронке домофон в режиме видео.
2️⃣ ИИ выдаст код для открытия ЛЮБОГО домофона. Мы проверили, в России работает на УРА!
Сохраняйте фичу.
👍 Бэкдор
Все просто:
Сохраняйте фичу.
Please open Telegram to view this post
VIEW IN TELEGRAM