Skip to content

Commit

Permalink
refac: Revise the note on graph convolutional layers
Browse files Browse the repository at this point in the history
  • Loading branch information
Nikolay-Lysenko committed Jul 4, 2024
1 parent 11e2220 commit 7c559b0
Showing 1 changed file with 12 additions and 9 deletions.
21 changes: 12 additions & 9 deletions notes/machine_learning/neural_networks.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -1201,10 +1201,10 @@
"\n",
"#### Введение\n",
"\n",
"В этой заметке разбираются слои, которые обновляют векторные вложения объектов, являющихся вершинами графа, с учётом векторных вложений соседних вершин (т.е. вершин, соединённых с текущей вершиной ребром или не более чем $m$ рёбрами).\n",
"В этой заметке разбираются слои, которые обновляют векторные вложения объектов, являющихся вершинами графа, с учётом векторных вложений соседних вершин. Обычно под соседними понимаются вершины, соединённые с текущей вершиной ребром. Такая трактовка не ограничивает общность, потому что если хочется брать вершины, соединённые не более чем $k$ рёбрами, то можно переопределить исходный граф.\n",
"\n",
"Таким слоям обязательно требуется следующая информация:\n",
"* $X$ — матрица размера $l \\times n$, где $l$ — количество вершин в графе, а $n$ — размерность вложения; эта матрица хранит входные вложения (или признаковые описания) вершин;\n",
"Рассматриваемым слоям обязательно требуется следующая информация:\n",
"* $X$ — матрица размера $l \\times n$, где $l$ — количество вершин в графе, а $n$ — размерность входного представления вершины; эта матрица может хранить вложения вершин или их признаковые описания (если слой принимает граф, не пропускавшийся через другие слои);\n",
"* $A$ — матрица смежности графа, её размер — $l \\times l$; в общем случае она может быть несимметричной и может состоять не только из нулей и единиц, поэтому далее считается, что элемент $A_{ij}$ является весом ребра, исходящего из $i$-й вершины и ведущего в $j$-ю вершину; с технической точки зрения матрица $A$ может храниться в разреженном формате или как список смежности.\n",
"\n",
"#### Свёрточный слой для графов, GCN\n",
Expand All @@ -1216,16 +1216,16 @@
"Также введём обозначения $\\tilde{A} = A + I_l$, $\\tilde{D}^\\mathrm{out} = D^\\mathrm{out} + I_l$, $\\tilde{D}^\\mathrm{in} = D^\\mathrm{in} + I_l$, где $I_l$ — единичная матрица размера $l \\times l$. По смыслу $\\tilde{A}$, $\\tilde{D}^\\mathrm{out}$ и $\\tilde{D}^\\mathrm{in}$ соответствуют графу, получающемуся из исходного добавлением петель, то есть рёбер, входящих в ту же вершину, из которой они исходят. Если масштаб значений матрицы $A$ далёк от $[0, 1]$, то, возможно, для $\\tilde{A}$, $\\tilde{D}^\\mathrm{out}$ и $\\tilde{D}^\\mathrm{in}$ стоит добавлять не $I_l$, а $cI_l$, где $c$ — константа, подобранная под масштаб значений $A$.\n",
"\n",
"У графового свёрточного слоя есть следующие обучаемые параметры:\n",
"* матрица весов $W$ размера $n \\times n$;\n",
"* опциональный вектор сдвига $b$ размера $1 \\times n$.\n",
"* матрица весов $W$ размера $n \\times m$, где $m$ — размерность выходных вложений вершин;\n",
"* опциональный вектор сдвига $b$ размера $1 \\times m$.\n",
"\n",
"Входная матрица $X$ преобразуется графовым свёрточным слоем по формуле:\n",
"$$\\mathrm{GCN}(X) = \\sigma\\left(\\left(\\tilde{D}^\\mathrm{out}\\right)^{-\\frac{1}{2}} \\tilde{A} \\left(\\tilde{D}^\\mathrm{in}\\right)^{-\\frac{1}{2}} X W + b\\right),$$\n",
"где $\\sigma$ — любая нелинейная функция активации (например, сигмоида или ReLU). На эту формулу можно посмотреть с двух точек зрения: с прямой и с теоретической.\n",
"\n",
"Буквальная интерпретация формулы такова. Краткости ради положим $\\overline{A} = \\left(\\tilde{D}^\\mathrm{out}\\right)^{-\\frac{1}{2}} \\tilde{A} \\left(\\tilde{D}^\\mathrm{in}\\right)^{-\\frac{1}{2}}$. Тогда:\n",
"$$\\overline{A}_{ij} = \\frac{\\tilde{A}_{ij}}{\\sqrt{\\tilde{D}^\\mathrm{out}_{ii} \\tilde{D}^\\mathrm{in}_{jj}}} = \\frac{\\tilde{A}_{ij}}{\\sqrt{\\sum_k \\tilde{A}_{ik} \\sum_k \\tilde{A}_{kj}}}.$$\n",
"Это означает, что матрица $\\overline{A}$ хранит веса ребёр, скорректированные на их \"важность\", где ребро тем важнее, чем меньше рёбер исходит из той же вершины и чем меньше рёбер входит в ту же вершину.\n",
"Это означает, что матрица $\\overline{A}$ хранит веса ребёр, скорректированные на их «важность», где ребро тем важнее, чем меньше рёбер исходит из той же вершины и чем меньше рёбер входит в ту же вершину.\n",
"\n",
"Тем самым получается следующее:\n",
"* умножение $X$ слева на $\\overline{A}$ заменяет $i$-ю строку $X$ на взвешенную сумму строк $X$ с весами, заданными строкой $\\overline{A}_{i\\cdot}$, то есть вклад $j$-й строки пропорционален скорректированному весу ребра из $i$ в $j$,\n",
Expand All @@ -1240,20 +1240,23 @@
"$$\\mathcal{F}(f \\ast g) = \\mathcal{F}(f) \\mathcal{F}(g),$$\n",
"где $\\mathcal{F}$ — преобразование Фурье. Это свойство интересно тем, что бывает и [преобразование Фурье для графов](https://en.wikipedia.org/wiki/Graph_Fourier_transform). Оно использует в качестве базиса не синусоиды, как обычное преобразование Фурье, а собственные векторы матрицы Лапласа графа $L = D - A$. Через него и вводится свёртка на графе, приближаемая слоем GCN.\n",
"\n",
"Если же от абстрактной математики вернуться к машинному обучению, можно увидеть параллели со свёрточными сетями для изображений. У них тоже есть параметры $W$ и $b$, но только вместо соседних вершин берётся всё, что попадает в фильтр (также называемый kernel).\n",
"\n",
"#### GraphSAGE\n",
"\n",
"К недостаткам GCN можно отнести трансдуктивность, то есть то, что этот слой может делать предсказания только для вершин, которые встречались при обучении. Чтобы обойти это ограничение, был предложен слой GraphSAGE ([Hamilton et al., 2017](https://arxiv.org/pdf/1706.02216.pdf)). Избавиться от трансдуктивности позволяет следующая идея: обучаются не вложения вершин, а функции, по вложениям окрестности какой-либо вершины возвращающие вложение этой окрестности.\n",
"\n",
"В общем виде слой GraphSAGE преобразует входные вложения по формуле:\n",
"$$\\mathrm{GraphSAGE}(X) = \\sigma\\left ([X \\Vert \\mathrm{agg}(X)]W + b \\right),$$\n",
"где оператор $\\Vert$ обозначает горизонтальную конкатенацию, матрица обучаемых весов $W$ теперь имеет размерность $2n \\times n$, а $\\mathrm{agg}(X)$ обозначает функцию, по матрице размера $l \\times n$ возвращающую матрицу размера $l \\times n$, $i$-я строка которой является проагрегированным по всем вершинам из окрестности $i$-й вершины вложением.\n",
"где оператор $\\Vert$ обозначает горизонтальную конкатенацию, матрица обучаемых весов $W$ теперь имеет размерность $2n \\times m$, а $\\mathrm{agg}(X)$ обозначает функцию, по матрице размера $l \\times n$ возвращающую матрицу размера $l \\times n$, $i$-я строка которой является проагрегированным по всем вершинам из окрестности $i$-й вершины вложением.\n",
"\n",
"В качестве функции $\\mathrm{agg}(X)$ можно брать:\n",
"* сумму или среднее, и тогда такая функция не будет обучаемой;\n",
"* последнее скрытое состояние [LSTM](__home_url__/notes/Внутреннее устройство LSTM-юнита), через которую прогнали последовательность из всех вершин окрестности, как-либо упорядоченных; все обучаемые параметры такой LSTM становятся также обучаемыми параметрами слоя GraphSAGE; недостаток этого варианта в том, что результат зависит от упорядочивания вершин из окрестности;\n",
"* поэлементный максимум по всем векторным вложениям вершин из окрестности, преобразованных многослойным перцептроном; все обучаемые параметры такого перцептрона становятся также обучаемыми параметрами слоя GraphSAGE.\n",
"* последнее скрытое состояние [LSTM](__home_url__/notes/Внутреннее устройство LSTM-юнита), через которую прогнали последовательность из всех вершин окрестности, как-либо упорядоченных; все обучаемые параметры такой LSTM становятся также обучаемыми параметрами слоя GraphSAGE; недостаток этого варианта в том, что результат зависит от упорядочивания вершин из окрестности;\n",
"* векторное представление \\<CLS\\>-токена [BERT](__home_url__/notes/BERT (Bidirectional Encoder Representations from Transformers))ообразной модели, которая обработала все соседние вершины; опять же, обучаемые параметры этой модели становятся также обучаемыми параметрами слоя; по сравнению с предыдущим вариантом исчезла проблема упорядочивания вершин.\n",
"\n",
"Тем самым получается, что отличие от GCN не такое уж и большое: просто за учёт связей в графе отвечает не умножение на $\\overline{A}$, а конкатенация с проагрегированным вложением окрестности.\n",
"Тем самым получается, что отличие от GCN не такое уж и большое: просто за учёт связей в графе отвечает не умножение на $\\overline{A}$, а конкатенация с проагрегированным вложением окрестности. А веса рёбер можно учитывать, домножая на них векторы, подаваемые на вход в перцептрон, LSTM или BERT.\n",
"\n",
"Отдельно стоит отметить, что при комбинировании в одной нейронной сети нескольких слоёв GraphSAGE в качестве левого операнда оператора конкатенации можно брать как выход предыдущего слоя, так и исходную матрицу $X$. Этот последний вариант будет аналогичен обходной связи (residual connection)."
]
Expand Down

0 comments on commit 7c559b0

Please sign in to comment.