
Koku alma duyusu olarak da adlandırılan lfaction, insanın çevredeki kokuları algılamasını sağlayan temel bir duyudur. Koku alma süreci, burun boşluğuna giren uyarıcı olan bir kokunun varlığıyla başlar. Molekül, koku alma epitelindeki koku reseptörleriyle etkileşime girdiğinde, kokuların kimyasal sinyalini nöronal sinyale dönüştürür ve koku alma soğanına iletir. Sinir sinyalleri beyinde işlenip kodlandıktan sonra koku alma algısına yol açar.
Görme ve duyma gibi diğer duyusal modalitelerin aksine, koku alma en az anlaşılanıdır. Şimdiye kadar, koku reseptörleri ve koku maddelerinin kombinasyonlarını kodlayarak insan koku alma algısının tahmini hala oldukça zorlu bir görevdir. Son yıllarda, makine öğrenimi koku maddesinin moleküler yapıları, koku maddesi reseptörleri ve karşılık gelen kokular arasındaki ilişkiyi araştırmak için giderek daha yaygın hale geldi.

Benzer molekül kimyasal yapılarına sahip koku maddeleri çok farklı kokulara sahip olabilir ve benzer kokulara sahip koku maddeleri belirgin moleküler işlev gruplarına sahip olabilir. Örneğin, farklı molekül kimyasal yapılarına sahip benzaldehit (C₇H₆O) ve hidrojen siyanür (HCN), ikisi de badem gibi kokar. Bu, insan koku alma algısının oldukça karmaşık olduğu anlamına gelir. Ayrıca, genetik çeşitlilik, kültürel veya çevresel geçmişler, geçmiş deneyimler, yaş veya hatta duygusal durumlar gibi çeşitli nedenlerden dolayı öznel de olabilir.
İnsan Koku Alma Fizyolojisi
1991’de Linda Buck ve Richard Axel, koku ayrımından sorumlu reseptörleri klonlayarak çığır açan bir keşifte bulundular. Reseptörler, koku reseptörleri veya olfaktör reseptörleri (OR’ler) olarak bilinir ve G-protein bağlı reseptör (GPCR) ailesine aittir [2] . OR’ler , bir OR’nin birden fazla kokuya bağlanabileceği, bir kokunun birden fazla OR ile etkileşime girebileceği ve farklı kokuların OR kombinasyonları ile etkileşime girebileceği bir kombinasyonel şekilde kokular tarafından aktive edilebilir [3] .
Aşağıdaki şekil insan koku alma sürecini göstermektedir. Uçucu bir molekül burun boşluğuna girdiğinde, koku alma epitelinin (OE) mukusuna karışır. Daha sonra, molekül OE’deki OR’lere bağlanır ve elektrik sinyali üreten biyokimyasal reaksiyonları tetikler. Bu sürece koku alma transdüksiyonu denir . Elektrik sinyalleri, koku algısı için beyne bilgi iletilmeden önce koku alma ampulünde işlenir ve kodlanır [4] .

İnsan Koku Algısı
Koku alma algısının tahmini, son on yıllarda daha fazla ilgi gören moleküler özellik tahmin probleminin bir alt alanıdır. Son zamanlarda, makine öğrenimi (ML), koku vericinin moleküler yapıları ve kokuları arasındaki ilişkiyi araştırmak için yaygın olarak kullanılmaktadır. ML yaklaşımlarının koku alma algısının tahmininde klasik yöntemlerden daha iyi performans gösterdiği bulunmuştur.
ML ile koku algısının tahmini kabaca iki kategoriye ayrılabilir: tanımlayıcı tabanlı model ve grafik tabanlı model . Rastgele orman (RF) veya k-en yakın komşular (KNN) gibi tanımlayıcı tabanlı modellerde, moleküler tanımlayıcılar ve/veya parmak izleri genellikle girdi olarak kullanılır. Grafik sinir ağı (GNN) gibi grafik tabanlı modellerde , moleküler grafikler tarafından kodlanan kimyasal bilgiler girdi olarak kullanılır ve doğrudan ağa beslenir.

Grafik Gösterimi
GNN’nin en temel parçası bir Grafiktir. Bir grafik, iki bileşenden oluşan bir veri yapısıdır: düğümler (köşeler) ve kenarlar. Bir grafik G , G = (V, E) olarak tanımlanabilir , burada V düğüm kümesidir ve E aralarındaki kenarlardır. Aşağıdaki şekil, bağlar aracılığıyla diğer atomlara bağlı atomlara sahip kafein molekülü olan bir grafik gösterimini göstermektedir.

Aşağıdaki grafiğe bakalım. Düğümler (tepe noktaları) V = {1, 2, 3, 4} ve kenarlar E = {(1, 2), (3, 4), (2, 4), (3, 4)} . Basitleştirmek için grafiğin yönlendirilmemiş olduğunu varsaydığımızı ve dolayısıyla (2, 1) gibi yansıtılmış çiftler eklemediğimizi unutmayın . Uygulamada, düğümler (tepe noktaları) ve kenarlar genellikle belirli niteliklere sahip olabilir ve kenarlar yönlendirilmiş bile olabilir.

A komşuluk matrisi, elemanları düğüm çiftlerinin bitişik (bağlı) olup olmadığını gösteren bir kare matristir. En basit durumda, i düğümünden j düğümüne bir bağlantı varsa Aᵢⱼ 1’dir , aksi takdirde 0’dır. Bir grafikte kenar nitelikleri veya farklı kenar kategorileri varsa, bu bilgi de matrise eklenebilir. Yönlendirilmemiş bir grafik için, A’nın simetrik bir matris olduğunu unutmayın ( Aᵢⱼ = Aⱼᵢ ).

Grafik Evrişimi
Grafik Evrişimsel Ağı (GCN), “filtre” parametrelerinin genellikle grafikteki tüm konumlarda paylaşılması anlamında görüntülerdeki evrişimlere benzer. Aynı zamanda, GCN’ler mesaj geçirme mekanizmalarına güvenir, bu da düğümlerin komşularla bilgi alışverişinde bulunduğu ve birbirlerine “mesajlar” gönderdiği anlamına gelir.
Matematiğe bakmadan önce, GCN’nin nasıl çalıştığını görsel olarak anlamaya çalışabiliriz. İlk adım, her düğümün tüm komşularına göndermek istediği mesajı temsil eden bir özellik vektörü oluşturmasıdır. İkinci adımda, mesajlar komşulara gönderilir, böylece bir düğüm bitişik düğüm başına bir mesaj alır. Aşağıda örnek grafiğimiz için iki adımı görselleştirdik.

Bunu daha matematiksel terimlerle formüle etmek istiyorsak, öncelikle bir düğümün aldığı tüm mesajları nasıl birleştireceğimize karar vermeliyiz. Mesaj sayısı düğümler arasında değiştiğinden, herhangi bir sayı için işe yarayan bir işleme ihtiyacımız vardır. Bu nedenle, genellikle yapılacak şey toplamak veya ortalamayı almaktır. H ⁽ ˡ ⁾ düğümlerinin önceki özellikleri göz önüne alındığında, GCN katmanı aşağıdaki gibi tanımlanır:

W⁽ˡ ⁾, giriş özelliklerini mesajlara dönüştürdüğümüz ağırlık parametreleridir H⁽ˡ ⁾W⁽ˡ ⁾ . Komşuluk matrisi A’ya, her düğümün kendi mesajını kendisine de göndermesi için birim matrisi ekleriz : Â=A+I . Son olarak, toplama yapmak yerine ortalamayı almak için, Dᵢᵢ’nin i düğümünün sahip olduğu komşu sayısını belirttiği bir diyagonal matris olan D^ matrisini hesaplarız . σ, keyfi bir aktivasyon fonksiyonunu temsil eder ve mutlaka sigmoidi temsil etmez (genellikle GNN’lerde ReLU tabanlı bir aktivasyon fonksiyonu kullanılır).
PyTorch’ta GCN katmanını uygularken, tensörler üzerindeki esnek işlemlerden faydalanabiliriz. Bir D^ matrisi tanımlamak yerine , toplanan mesajları daha sonra komşu sayısına bölebiliriz. Ek olarak, ağırlık matrisini doğrusal bir katmanla değiştiririz, bu da bize bir önyargı eklememize olanak tanır. Bir PyTorch modülü olarak yazılan GCN katmanı aşağıdaki gibi tanımlanır:
sınıf GCNLayer (nn.Module):
def __init__ ( self, c_in, c_out ):
super ().__init__()
self.projeksiyon = nn.Linear(c_in, c_out)
def forward(self, node_feats, adj_matrix):
"""
Argümanlar:
node_feats: [batch_size, num_nodes, c_in] şeklinde düğüm özelliklerine sahip tensör
adj_matrix: Grafiğin bitişiklik matrislerinin kümesi. i'den j'ye bir kenar varsa,
adj_matrix[b,i,j]=1, aksi takdirde 0. Simetrik olmayan matrisler tarafından yönlendirilmiş kenarları destekler.
Kimlik bağlantılarının zaten eklendiğini varsayar.
Şekil: [batch_size, num_nodes, num_nodes]
"""
# Num neighbours = gelen kenar sayısı
num_neighbours = adj_matrix.sum(dim=-1, keepdims=True)
node_feats = self.projection(node_feats)
node_feats = torch.bmm(adj_matrix, node_feats)
node_feats = node_feats / num_neighbours
node_feats'i döndür
GCN katmanını daha iyi anlamak için, bunu yukarıdaki örnek grafiğe uygulayalım. İlk olarak, bazı düğüm özelliklerini ve eklenen kendi kendine bağlantılarla bitişiklik matrisini belirtelim:
node_feats = torch.arange( 8 , veri türü=torch.float32).view( 1 , 4 , 2 )
adj_matrix = Tensör([[[ 1 , 1 , 0 , 0 ], [ 1 , 1 , 1 , 1 ], [ 0 , 1 , 1 , 1 ], [ 0 , 1 , 1 , 1 ]]])
print("Düğüm özellikleri:\n", node_feats)
print("\nBitişiklik matrisi:\n", adj_matrix)
Düğüm özellikleri:
tensör([[[0., 1.],
[2., 3.],
[4., 5.],
[6., 7.]]])
Komşuluk matrisi:
tensör([[[1., 1., 0., 0.],
[1., 1., 1., 1.],
[0., 1., 1., 1.],
[0., 1., 1., 1.]]])
Sonra, buna bir GCN katmanı uygulayalım. Basitlik açısından, doğrusal ağırlık matrisini bir kimlik matrisi olarak başlatıyoruz, böylece girdi özellikleri mesajlara eşit oluyor. Bu, mesaj geçirme işlemini doğrulamamızı kolaylaştırıyor.
katman = GCNLayer(c_in= 2 , c_out= 2 )
katman.projeksiyon.ağırlık.veri = Tensör([[ 1.0 , 0.0 ], [ 0.0 , 1.0 ]])
katman.projeksiyon.önyargı.veri = Tensör([ 0.0 , 0.0 ])
torch.no_grad() ile:
out_feats = layer(node_feats, adj_matrix)print("Bağlantı matrisi", adj_matrix)
print("Giriş özellikleri", node_feats)
print("Çıktı özellikleri", out_feats)
Komşuluk matrisi tensörü([[[1., 1., 0., 0.],
[1., 1., 1., 1.],
[0., 1., 1., 1.],
[0., 1., 1., 1.]]])
Giriş özellikleri tensörü([[[0., 1.],
[2., 3.],
[4., 5.],
[6., 7.]]])
Çıkış özellikleri tensörü([[[1., 2.],
[3., 4.],
[4., 5.],
[4., 5.]]])
Gördüğümüz gibi, ilk düğümün çıktı değerleri kendisinin ve ikinci düğümün ortalamasıdır. Benzer şekilde, diğer tüm düğümleri doğrulayabiliriz. Ancak, bir GNN’de, komşularının ötesinde düğümler arasında özellik değişimine de izin vermek isteriz. Bu, bize bir GNN’nin son düzenini veren birden fazla GCN katmanı uygulanarak elde edilebilir. GNN, bir dizi GCN katmanı ve ReLU gibi doğrusal olmayanlıklar tarafından oluşturulabilir.

Referanslar
Araneda RC, Kini AD, Firestein S. Bir koku reseptörünün moleküler alıcı aralığı. Doğa Sinirbilimi. 3: 1248–1255 (2000).
Buck L, Axel R. Yeni bir çok genli aile koku reseptörlerini kodlayabilir: koku tanıma için moleküler bir temel. Hücre. 65(1): 175-187 (1991).
Bushdid C, Magnasco MO, Vosshall LB, Keller A. İnsanlar 1 trilyondan fazla koku uyaranını ayırt edebilir. Bilim. 343(6177): 1370-2 (2014).
Gilad Y, Lancet D. İnsan işlevsel koku repertuarındaki popülasyon farklılıkları. Moleküler Biyoloji ve Evrim. 20(3): 307-314 (2003).
McCann Worldgroup. Gençlik hakkında gerçek. Mayıs 2011.
Quignon P, Giraud M, Rimbault M, Lavigne P, Tacher S, ve diğerleri. Köpek ve sıçan koku alma reseptörü repertuarları. Genom Biyolojisi. 6, R83 (2005).