Изменения
→Предсказание молекулярных свойств
NeuralFingerprints принимает один гиперпараметр - максимальное расстояние, которое нужно учитывать при просмотре соседей каждого атома. После этого для каждого расстояния для каждого атома суммируются атомные представления его соседей на текущем расстоянии. Таким образом, получается векторное представление текущего атома фиксированной длины, которая равна количеству свойств у одного атома. Каждый элемент такого представления умножается на обучаемый параметр, уникальный для номера свойства и текущего рассматриваемого расстояния. После этого применяется функция активации к полученному ранее вектору, умноженному на вес, отвечающий за текущее расстояние. Полученные результаты для каждого из атомов на каждом из расстояний суммируются и получается результирующий вектор свойств для молекулы. Таким образом, в этой сети обучаемые параметры {{---}} веса для каждого из свойств атомов на каждом расстоянии (<tex>H^i_j</tex>, где <tex>i</tex> {{---}} индекс номера свойства (в модели их всего 5), <tex>j</tex> {{---}} индекс для текущего расстояния) и веса для каждого из расстояний (<tex>W_j</tex>, где <tex>j</tex> {{---}} индекс для текущего расстояния). Псевдокод представлен ниже.
'''function''' neuralFingerptint(molecule, R, H, W):# R - максимальное расстояние, H - матрица весов размера len(molecule)<tex>\cdot</tex>R, W - вектор весов размера R
f = array[len(molecule), 0]
'''for''' a in molecule:
'''for''' L = 1 to R:
'''for''' a in molecule:
i = '''softmax'''(r[a]<tex>\cdot</tex>W[L]) <span style="color:Green"># получаем вектор для текущего атома и расстояния</span>
f = f + i <span style="color:Green"># добавляем его к ответу</span>