
Теория вероятности никогда не переставала меня удивлять, начиная ещё с того момента, как я впервые с ней столкнулся, и до сих пор. В разное время в разной степени меня настигали, назовём их «вау-эффекты», шоковые удары в мозжечок, от которых меня накрывало эффектом третьего ока, и мир навсегда переставал быть прежним.
- Первый «вау-эффект» я испытал от Центральной предельной теоремы. Берем кучу случайных величин, устремляем их количество в бесконечность и получаем нормальное распределение. И совсем неважно как распределены эти величины, неважно, будь это подбрасывания монетки или капли дождя на стекле, вспышки на Солнце или остатки кофейной гущи, результат будет всегда один — их сумма всегда стремится к нормальности. Разве что, нужно потребовать их независимость и существование дисперсии (позднее я узнал, что существует теорема и для экстремальных тяжелохвостых распределений с бесконечной дисперсией). Тогда этот парадокс долго не давал мне заснуть.
- В какой-то момент учебы в университете такие предметы как дискретная математика и функциональный анализ слились вместе и всплыли в теорвере под видом выражения «почти наверное». Стандартный пример: вы случайно выбираете число от 0 до 1. С какой вероятностью вы ткнёте в рациональное число (привет, функция Дирихле)? Спойлер: 0. Ноль, Карл! Бесконечное множество не имеет никакой силы, если оно счетно. У вас бесконечное число вариантов, но вы не выберете ни один из них. Вы не выберете 0, или 1, или 1/2, или 1/4. Вы и не выберете 3/2.
Да-да, что выбрать 1/2, что выбрать 3/2, вероятность нулевая. Вот только в 3/2 вы не ткнёте точно, таковы условия, а в 1/2 вы не попадёте ну… «почти наверное». Концепция «почти всюду»/«почти наверное» забавляет математика, а обывателя заставляет крутить пальцем у виска. Многие ломают себе мозг в попытке классифицировать нули, но результат того стоит. - Третий по счёту, но не по силе, «вау-эффект» настиг уже на переходе в advanced level
— при чтении книг по стохастическим исчислениям. Причиной тому стала лемма Ито. Со времён школьной скамьи, когда нашим девственным глазам впервые показали производную, мы нисколько не сомневались в правильности вот такой вот формулы:
И она верна. Вот только, если— это не случайный процесс. Адовая смесь из свойств нормального распределения и «почти наверное» доказывает, что в обратной ситуации эта формула в общем случае неверна. Томик мат.анализа с решениями обыкновенных дифференциальных уравнений теперь можно выкинуть в топку. Люди в теме тихо хихикают, остальные нетерпеливо листают статьи в Вики с исчислениями Ито.
Но совсем недавно я испытал и четвёртый, так называемый, «вау-эффект». Это не какой-то отдельно взятый факт, а целая теория, которую я собираюсь поведать в серии из нескольких статей. И если предыдущие финты теории вероятности вас уже не удивляют, то прошу милости под кат (знаю, вы и так уже здесь).
Полиномы Эрмита
Начнем с обыкновенной алгебры — определим «вероятностные» (они немного отличаются от «физических») полиномы Эрмита:

Полиномы Эрмита обладают следующими свойствами:
Последнее соотношение поможет нам в вычислении
-- | 'hermite' is an infinite list of Hermite polynomials for given x
hermite :: (Enum a, Num a) => a -> [a]
hermite x = s
where s@(_:ts) = 1 : x : zipWith3 (\hn2 hn1 n1 -> x * hn1 - n1 * hn2) s ts [1..]
Функция hermite принимает на вход параметр
s = [1, x, x^2-1, x^3-3x, x^4-6x^2+3, ... ]
Хвост этого листа (без первого элемента):
ts = [x, x^2-1, x^3-3x, x^4-6x^2+3, ... ]
Вдогонку мы возьмем ещё лист с натуральными числами:
[1, 2, 3, ... ]
Функция zipWith3 комбинирует последние три листа, используя данный ему оператор:
x * [ x, x^2-1, x^3-3x, ... ]
- [ 1*1, 2*x, 3*(x^2-1), ... ]
= [x^2-1, x^3-3x, x^4-6x^2+3, ... ]
Добавляем впереди 1 и x, и получаем полный набор Эрмитовых полиномов. Иными словами, мы достали лист со значениями полиномов, используя лист с этими значениями, то есть, лист, который мы и пытаемся достать. Поговаривают, что полное осознание красоты и мощи ФП сродни умению заглянуть себе в ухо.
Проверим: первые 6 значений для
Prelude> take 6 (hermite 1)
[1,1,0,-2,-2,6]
Что мы и ожидали увидеть.
Гильбертово пространство
Двинемся немного в другую степь — вспомним определение пространства Гильберта. Говоря научным языком, это полное метрическое линейное пространство с заданным на нём скалярным произведением
- Самый простой пример — это пространство вещественных чисел:
. В таком случае скалярным произведением двух чисел
и
у нас будет
- Затем я перехожу в Эвклидово пространство
. Теперь
Это пространство можно расширить до пространства комплексных векторов:, для которого скалярное произведение будет
(верхняя черта обозначает комплексное сопряжение). - Ну и наконец прихожу в пространство для взрослых, пространство с бесконечной размерностью. В нашем случае это будет пространство квадратично интегрируемых функций, заданных на некотором множестве
с заданной мерой
. Мы будем его обозначать в виде
. Скалярное произведение на нем задается следующим образом:
Обычно под множествомподразумевается интервал
, а под мерой
— равномерная мера (мера Лебега), т.е.
. И тогда скалярное произведение записывается в виде обыкновенного интеграла Лебега
Если же мы думаем в терминах теории вероятностей, то— это пространство элементарных событий,
и
— случайные величины, а
— вероятностная мера. У каждой такой меры есть своя функция плотности распределения
, которая может быть отличной от константы, тогда
и скалярное произведение совпадает с математическим ожиданием:

Гауссовский процесс
Настало время внести в наши размышления элемент случайности. Пусть у нас имеется гильбертово пространство
- вектор из случайных величин
распределен нормально с нулевым мат.ожиданием для любых
, и
- для
По своей математической сути
Пример. Пусть
Для того, чтобы реализовать Гауссовский процесс я воспользуюсь пакетами, которые благородные люди уже написали за нас.
import Data.Random.Distribution.Normal
import Numeric.LinearAlgebra.HMatrix as H
-- | 'gaussianProcess' samples from Gaussian process
gaussianProcess :: Seed -- random state
-> Int -- number of samples m
-> Int -- number of dimensions n
-> ((Int, Int) -> Double) -- function that maps indices of the matrix into dot products of its elements
-> [Vector Double] -- m n-th dimensional samples of Gaussian process
gaussianProcess seed m n dotProducts = toRows $ gaussianSample seed m mean cov_matrix
where mean = vector (replicate n 0)
cov_matrix = H.sym $ (n><n) $ map (\i -> dotProducts (quot i n, rem i n)) [0..]
Функция gaussianProcess принимает параметр seed (стандартная штука для генераторов), nSamples — размер выборки, dim — размерность вектора

Уже подходит время объединить все полученные нами знания вместе. Но прежде, стоит упомянуть об одном полезном свойстве эрмитовых полиномов и нормального распределения в совокупности. Пусть
О чем это нам говорит? Во-первых, мы получили норму
Разложим пространство в хаос
Пусть

Воу-воу, палехче! Давайте разложим эту теорему о разложении по кусочкам и переведём с математического на человеческий. Мы не будем сильно вдаваться в детали, а лишь интуитивно поясним о чем тут речь. Значок
С нотацией вроде разобрались. Теперь о том, что такое Винеровский хаос. Идем от простого:
Пример. Пусть
Мы показали ранее, что
На самом деле
На самом деле, такое разложение полезно, если распределение
в определенном смысле близко к распределению нормальному. Например, если мы имеем дело с Броуновским движением или с логнормальным распределением. И мы не просто так упомянули, что
создаётся
, это очень важное условие. В действительности, плотность нормального распределения
Если же распределение
далеко от Гаусса, то можно попробовать и другие ортогональные полиномы. Например, плотность Гамма-распределения:
Равномерному распределению соответствуют полиномы Лежандра, биномиальному распределению — полиномы Кравчука, и т.п. Теория, развивающая идею разложения вероятностного пространства на ортогональные полиномы именуется в англоязычной литературе как «Polynomial chaos expansion».
Если же распределение
Равномерному распределению соответствуют полиномы Лежандра, биномиальному распределению — полиномы Кравчука, и т.п. Теория, развивающая идею разложения вероятностного пространства на ортогональные полиномы именуется в англоязычной литературе как «Polynomial chaos expansion».
Пример. Давайте теперь возьмем
Заметьте, что каждый второй элемент в разложении по базису равен нулю.
-- | 'second' function takes a list and gives each second element of it
second (x:y:xs) = y : second xs
second _ = []
-- | 'coinTossExpansion' is a Wiener chaos expansion for coin-toss r.v. to n-th element
coinTossExpansion :: Int -- number of elements in the sum
-> Double -- gaussian random variable
-> Double -- the sum
coinTossExpansion n xi = sum (take n $ 0.5 : zipWith (*) fn (second $ hermite xi))
where fn = 1.0 / (sqrt $ 2 * pi) : zipWith ( \fn1 k -> -fn1 * k / ((k + 1) * (k + 2)) ) fn [1, 3..]
Функция coinTossExpansion возвращает сумму, полученную разложением случайной монетки в винеровский хаос, для данного

Судя по этому графику, где-то после
-- | 'coinTossSequence' is a coin-toss sequence of given size
coinTossSequence :: Seed -- random state
-> Int -- size of resulting sequence
-> [Int] -- coin-toss sequence
coinTossSequence seed n = map (round.coinTossExpansion 100) (toList nvec)
where nvec = gaussianProcess seed n 1 (\(i,j) -> 1) !! 0
Проверим, как будет выглядеть последовательность из 20 подбрасываний.
Prelude> coinTossSequence 42 20
[0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1,1,1,0,1]
Теперь, когда вас попросят сгенерировать подбрасывания монетки, вы знаете, что им показать.

Ну а без шуток, мы что-то посчитали и что-то разложили, а какой в этом всем толк, спросите вы. Не спешите чувствовать себя обманутыми. В последующих статьях мы покажем, как это разложение позволяет брать производную от случайной величины (в некотором смысле), расширим стохастическое интегрирование (и ваше сознание), и найдем всему этому практическое применение в машинном обучении.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Впечатления от статьи:
83.28% Я ничего не понял, продолжай!239
5.57% Я ничего не понял, не продолжай!16
10.8% Я все понял, продолжай!31
0.35% Я все понял, не продолжай…1
Проголосовали 287 пользователей. Воздержался 41 пользователь.