Bagikan melalui


Operasi Biner

Operator biner Elementwise.

ElementTimes (x, y)
x .* y
Minus (x, y)
x - y
Plus (x, y)
x + y
LogPlus (x, y)
Less (x, y)
Equal (x, y)
Greater (x, y)
GreaterEqual (x, y)
NotEqual (x, y)
LessEqual (x, y)
BS.Boolean.And (x, y)
BS.Boolean.Or (x, y)
BS.Boolean.Xor (x, y)

Parameter

  • x: input kiri
  • y: input kanan

Dimensi x dan y harus cocok (tunduk pada aturan penyiaran, lihat di bawah).

Untuk ketiga Boolean operasi tersebut, kedua input diharapkan berupa 0 atau 1, jika tidak, perilaku fungsi tidak ditentukan, dan sebenarnya akan berubah dalam versi mendatang.

Nilai jarang saat ini tidak didukung.

Mengembalikan nilai

Fungsi-fungsi ini mengembalikan hasil operasi yang sesuai. Operator hubungan (Equal() dll.) dan tiga Boolean operasi mengembalikan nilai yang 0 atau 1.

Dimensi output atau bentuk tensor identik dengan input, tunduk pada penyiaran, lihat di bawah ini.

Deskripsi

Ini adalah operator biner umum. Mereka diterapkan secara elementwise. (Perhatikan bahwa operator BrainScript *tidak elementwise, tetapi singkatan dari produk matriks. Ini berbeda, misalnya, dari pustaka Python numpy .)

Dimensi input harus identik, dengan pengecualian penyiaran.

Semantik penyiaran

Penyiaran, konsep yang dimodelkan CNTK setelah pustaka Python numpy , berarti bahwa dimensi dalam salah satu input dapat menjadi 1 di mana input lain tidak. Dalam hal ini, input dengan 1 dimensi akan disalin n kali, di mana n merupakan dimensi input lain yang sesuai. Jika peringkat tensor tidak cocok, bentuk tensor input dengan dimensi pelajaran akan diasumsikan 1, dan memicu penyiaran.

Misalnya, menambahkan [13 x 1] tensor ke [1 x 42] vektor akan menghasilkan [13 x 42] vektor yang berisi jumlah semua kombinasi.

Operasi Hubungan

Operator relasi (Equal() dll.) tidak dapat diferensialkan, gradiennya selalu dianggap 0. Mereka dapat digunakan untuk bendera, misalnya sebagai argumen kondisi dalam If() operasi.

LogPlus()

Operasi menghitung LogPlus() jumlah nilai yang diwakili dalam bentuk logaritma. Yaitu, menghitung:

LogPlus (x, y) = Log (Exp (x) + Exp (y))

di mana x dan y merupakan logaritma nilai. Operasi ini berguna saat berhadapan dengan probabilitas, yang sering kali sangat kecil sehingga hanya representasi logaritmik yang memungkinkan akurasi numerik yang sesuai.

Catatan: Nama umum lain untuk operasi ini adalah log-add-exp, misalnya SciPy.

Contoh

Lapisan Sigmoid Standar

Lapisan ini menggunakan biner +elementwise :

z = Sigmoid (W * x + b)

Perhatikan bahwa * di atas tidak bersifat elemen, tetapi merupakan singkatan dari produk matriks.

Implementasi Alternatif Aktivasi Softmax

Fungsi Softmax() aktivasi dapat ditulis menggunakan penyiaran Minus:

MySoftmax (z) = Exp (z - ReduceLogSum (z))

Di sini, ReduceLogSum() mengurangi vektor z menjadi skalar dengan menghitung jumlah logaritmanya. Melalui penyiaran semantik pengurangan, skalar ini kemudian dikurangi dari setiap nilai input. Ini mengimplementasikan pembagian dengan jumlah semua nilai dalam fungsi Softmax.

Elementwise Max dari Dua Input

Maksimum elemen dari dua input dapat dihitung sebagai kombinasi dan Greater()If():

MyElementwiseMax (a, b) = If (Greater (a, b), a, b)

Ini juga berfungsi dengan penyiaran. Misalnya, pengulang linier dapat ditulis dengan ini menggunakan konstanta skalar sebagai input kedua:

MyReLU (x) = MyElementwiseMax (x, Constant(0))