Kurangi ukuran model ML tanpa registrasi dan SMS



Siapa pun yang mengalami pembelajaran mesin memahami bahwa ini membutuhkan daya komputasi yang serius. Pada artikel ini, kami akan mencoba menerapkan algoritma yang dikembangkan di MIT untuk memampatkan jaringan saraf, yang akan mengurangi dimensi bobot model yang dilatih dan akan mengarah pada pembelajaran yang lebih cepat dan peluncuran model yang lebih cepat.

Neural networks telah terbukti menjadi alat yang sangat baik untuk menyelesaikan berbagai tugas, tetapi, sayangnya, penggunaannya membutuhkan daya komputasi yang signifikan, yang mungkin masih belum ada dalam bisnis kecil. Ada banyak jenis kompresi jaringan saraf yang dapat dibagi menjadi perangkat keras, tingkat rendah, dan matematika, tetapi artikel ini akan membahas metode yang dikembangkan di MIT pada tahun 2019 dan bekerja langsung dengan jaringan saraf itu sendiri.

Metode ini disebut "Hipotesis Menang". Secara umum, ini terdengar seperti ini: Setiap jaringan saraf yang terhubung sepenuhnya dengan bobot yang diinisialisasi secara acak berisi subnet dengan bobot yang sama, dan subnet yang dilatih secara terpisah dapat memiliki akurasi yang sama dengan jaringan asli.

Bukti formal dan artikel lengkap dapat ditemukan di sini . Kami tertarik pada kemungkinan aplikasi praktis. Singkatnya, algoritma ini adalah sebagai berikut:

  1. Kami membuat model, menginisialisasi parameter secara acak
  2. Mempelajari jaringan iterasi j
  3. Kami memotong parameter jaringan yang memiliki nilai terkecil (tugas paling sederhana adalah menetapkan beberapa nilai ambang)
  4. Kami mengatur ulang parameter yang tersisa ke nilai awal mereka, kami mendapatkan subnet yang kami butuhkan.


Secara teori, algoritma ini perlu diulang jumlah langkah ke-n, tetapi untuk contoh kita akan melakukan hanya satu iterasi. Buat jaringan terhubung sepenuhnya sederhana menggunakan tensorflow dan Keras:

import tensorflow as tf
from tensorflow import keras

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(300, activation='relu'),
    keras.layers.Dense(150, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='SGD',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

Kami akan mendapatkan arsitektur jaringan berikut:



Dan kami akan melatihnya pada dataset MNIST-fashion dari 60.000 gambar. Akurasi pada data verifikasi akan sama dengan 0,8594. Kami berlaku untuk parameter iterasi jaringan 1 dari algoritma ini. Dalam kode, tampilannya seperti ini:

#  
threshold = 0.001

#       np.array
weights = model.weights
weights = np.asarray(weights)

#    
first_h_layer_weights = weights[1]
second_h_layer_weights = weights[3]

def delete_from_layers(one_d_array, threshold):
    index = []
    for i in range(one_d_array.shape[0]):
        #   ,       
        if abs(one_d_array[i]) <= threshold:
            index.append(i)
    #    ,   
    new_layer = np.delete(one_d_array, index)
    return new_layer

new_layer_weights = delete_from_layers(second_h_layer_weights, threshold)

Dengan demikian, setelah mengeksekusi kode ini, kami akan menyingkirkan bobot praktis yang tidak digunakan. Dua hal yang patut dicatat: dalam contoh ini, ambang batas dipilih secara empiris dan algoritma ini tidak dapat diterapkan pada bobot lapisan input dan output.

Setelah menerima bobot baru, perlu mendefinisikan kembali model asli, menghilangkan kelebihannya. Sebagai hasilnya, kita mendapatkan:



Anda dapat melihat bahwa jumlah total parameter menurun hampir 2 kali lipat, yang berarti bahwa ketika melatih jaringan pertama, lebih dari setengah parameter tidak diperlukan. Pada saat yang sama, akurasi subnet adalah 0,8554, yang sedikit lebih rendah dari jaringan utama. Tentu saja, contoh ini indikatif, biasanya jaringan dapat dikurangi 10-20% dari jumlah parameter awal. Di sini, bahkan tanpa menerapkan algoritma ini, jelas bahwa arsitektur asli dipilih terlalu rumit.

Kesimpulannya, kita dapat mengatakan bahwa teknik ini tidak berkembang dengan baik saat ini, dan dalam tugas nyata, upaya untuk mengoptimalkan bobot model dengan cara ini hanya dapat memperpanjang proses pembelajaran, tetapi algoritma itu sendiri memiliki potensi yang cukup banyak.

All Articles