Menggunakan AI Explanations dengan AI Platform Prediction

Ini adalah panduan umum tentang cara men-deploy dan menggunakan model di AI Platform Prediction dengan Penjelasan AI.

Sebelum memulai

Anda harus melakukan beberapa hal sebelum dapat melatih dan men-deploy model di AI Platform:

  • Siapkan lingkungan pengembangan lokal Anda.
  • Siapkan project GCP dengan penagihan dan API yang diperlukan diaktifkan.
  • Buat bucket Cloud Storage untuk menyimpan paket pelatihan dan model terlatih Anda.

Untuk menyiapkan project GCP, ikuti petunjuk yang diberikan dalam contoh notebook.

Menyimpan model

TensorFlow 1.15, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 2.10, dan 2.11 didukung. Gunakan tf.saved_model.save untuk menyimpan model di TensorFlow 2.11, tetapi jangan menggunakannya untuk TensorFlow 1.15.

Pelajari lebih lanjut cara menyimpan model untuk digunakan dengan Penjelasan AI, dan cara menggunakan Explainable AI SDK.

File metadata penjelasan

Sebelum men-deploy model, Anda harus mengirimkan file metadata dengan informasi tentang input, output, dan dasar pengukuran model, sehingga Penjelasan AI memberikan penjelasan untuk bagian model yang benar.

Sebaiknya gunakan Explainable AI SDK untuk menemukan input dan output model Anda secara otomatis. Pada umumnya, hal ini menghemat waktu dan tenaga, karena Explainable AI SDK membuat dan mengupload file metadata penjelasan untuk Anda.

Membuat file metadata penjelasan secara manual

Jika memiliki kasus penggunaan lanjutan, Anda mungkin lebih memilih untuk menentukan input dan output model secara manual. Untuk membuat file metadata penjelasan secara manual, ikuti langkah-langkah berikut:

Contoh berikut menunjukkan tampilan file explanation_metadata.json:

{
    "inputs": {
      "data": {
        "input_tensor_name": "YOUR_INPUT_TENSOR_NAME"
        "input_baselines": [0]
      }
    },
    "outputs": {
      "duration": {
        "output_tensor_name": "YOUR_OUTPUT_TENSOR_NAME"
      }
    },
    "framework": "tensorflow"
}

Dalam contoh ini, "data" dan "duration" adalah nama yang bermakna untuk tensor input dan output yang dapat Anda tetapkan dalam proses membuat dan melatih model. Nama tensor input dan output yang sebenarnya mengikuti format name:index. Contohnya, x:0 atau Placeholder:0.

Untuk input_baselines, Anda dapat memulai dengan menentukan satu dasar pengukuran. Dalam contoh ini, [0] mewakili gambar yang seluruhnya hitam. Anda dapat menentukan beberapa dasar pengukuran untuk memberikan informasi tambahan. Pelajari lebih lanjut cara menyesuaikan dasar pengukuran.

Menemukan nama tensor input dan output secara manual

Pada umumnya, Anda dapat menggunakan Explainable AI SDK untuk menghasilkan input dan output untuk model Anda. Anda hanya perlu menemukan nama tensor input dan output secara manual jika menggunakan model TensorFlow 1.15 terlatih.

Cara terbaik untuk menemukan nama tensor input dan output bergantung pada jenis data input dan output, serta cara Anda mem-build model. Untuk penjelasan yang lebih mendalam tentang setiap kasus, serta contoh, lihat panduan tentang [memahami input dan output][understanding-inputs-outputs].

Jenis data input Jenis data output Kriteria lainnya Pendekatan yang direkomendasikan
Numerik atau string Angka Input tidak dalam bentuk serial. Output bukan data numerik yang diperlakukan sebagai data kategoris (misalnya, ID kelas numerik). Gunakan CLI SavedModel untuk menemukan nama tensor input dan output Anda. Atau, build file metadata penjelasan saat melatih dan menyimpan model, dengan program atau lingkungan Anda masih memiliki akses ke kode pelatihan.
Data serial apa pun Semua Tambahkan operasi penguraian TensorFlow ke fungsi input inferensi saat mengekspor model. Gunakan output operasi penguraian untuk membantu mengidentifikasi tensor input.
Semua Semua Model mencakup operasi pra-pemrosesan Untuk mendapatkan nama tensor input setelah langkah prapemrosesan, gunakan properti name dari tf.Tensor untuk mendapatkan nama tensor input.
Semua Bukan probabilitas, logit, atau jenis tensor floating point lainnya Anda ingin mendapatkan penjelasan untuk output yang bukan probabilitas, logit, atau jenis tensor floating point lainnya. Periksa grafik Anda dengan TensorBoard untuk menemukan tensor output yang benar.
Data apa pun yang tidak dapat dibedakan Semua Anda ingin menggunakan gradien terintegrasi, yang memerlukan input yang dapat dibedakan. Enkode input yang tidak terdiferensiasi sebagai tensor terdiferensiasi. Tambahkan nama tensor input asli dan tensor input yang dienkode ke file metadata penjelasan Anda.

Men-deploy model dan versi

AI Platform Prediction mengatur model terlatih Anda menggunakan resource model dan versi. Model AI Platform Prediction adalah penampung untuk versi model machine learning Anda.

Untuk men-deploy model, Anda membuat resource model di AI Platform Prediction, membuat versi model tersebut, lalu menautkan versi model ke file model yang disimpan di Cloud Storage.

Membuat resource model

AI Platform Prediction menggunakan resource model untuk mengatur berbagai versi model Anda.

Buat resource model untuk versi model Anda. Dalam perintah Google Cloud CLI berikut, ganti MODEL_NAME dengan nama yang Anda inginkan untuk model Anda. Nama model Anda harus diawali dengan huruf, dan hanya boleh berisi huruf, angka, serta garis bawah.

Anda harus membuat model di endpoint regional untuk menggunakan Penjelasan AI.

gcloud ai-platform models create MODEL_NAME \
  --region us-central1

Lihat API model AI Platform Prediction untuk mengetahui detail selengkapnya.

Membuat versi model

Sekarang Anda siap membuat versi model dengan model terlatih yang sebelumnya diupload ke Cloud Storage. Saat membuat versi, tentukan parameter berikut:

  • name: harus unik dalam model AI Platform Prediction.
  • deploymentUri: jalur ke direktori SavedModel Anda di Cloud Storage.
  • framework (wajib): Khusus tensorflow
  • runtimeVersion: menggunakan salah satu versi runtime berikut yang mendukung Penjelasan AI: 1.15, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 2.10, dan 2.11.
  • pythonVersion: gunakan "3.7" untuk versi runtime 1.15 dan yang lebih baru.
  • machineType (wajib): jenis virtual machine yang digunakan AI Platform Prediction untuk node yang menayangkan prediksi dan penjelasan. Pilih jenis mesin yang didukung untuk Penjelasan AI.
  • explanation-method: jenis metode atribusi fitur yang akan digunakan: "sampled-shapley", "integrated-gradients", atau "xrai".
  • Jalur atau langkah: gunakan --num-paths untuk sampel Shapley, dan gunakan --num-integral-steps untuk gradien terintegrasi atau XRAI.

Lihat informasi selengkapnya tentang setiap parameter ini di Training API dan Prediction API AI Platform untuk resource versi.

  1. Tetapkan variabel lingkungan untuk menyimpan jalur ke direktori Cloud Storage tempat SavedModel Anda berada, nama model, nama versi, dan pilihan framework Anda.

    MODEL=your_model_name
    MODEL_DIR="gs://your_bucket_name/"
    VERSION=your_version_name
    FRAMEWORK=tensorflow
    
  2. Buat versi:

    EXPLAIN_METHOD="integrated-gradients"
    gcloud beta ai-platform versions create $VERSION \
    --model $MODEL \
    --origin $MODEL_DIR \
    --runtime-version 1.15 \
    --framework $FRAMEWORK \
    --python-version 3.7 \
    --machine-type n1-standard-4 \
    --explanation-method $EXPLAIN_METHOD \
    --num-integral-steps 25 \
    --region us-central1
    

    Pembuatan versi memerlukan waktu beberapa menit. Setelah siap, Anda akan melihat output berikut:

    Creating version (this might take a few minutes)......done.
  3. Periksa status deployment model Anda, dan pastikan model Anda di-deploy dengan benar:

    gcloud ai-platform versions describe $VERSION_NAME \
      --model $MODEL_NAME \
      --region us-central1
    

    Pastikan statusnya adalah READY. Anda akan melihat output yang serupa dengan ini:

    createTime: '2018-02-28T16:30:45Z'
    deploymentUri: gs://your_bucket_name
    framework: TENSORFLOW
    machineType: n1-standard-4
    name: projects/your_project_id/models/your_model_name/versions/your_version_name
    pythonVersion: '3.7'
    runtimeVersion: '1.15'
    state: READY

Jenis mesin yang didukung untuk penjelasan

Untuk permintaan Penjelasan AI, Anda harus men-deploy versi model dengan salah satu jenis mesin berikut. Jika Anda tidak menentukan jenis mesin, deployment akan gagal.

Tabel berikut membandingkan jenis mesin yang tersedia:

Nama vCPU Memori (GB)
n1-standard-2 2 7,5
n1-standard-4 4 15
n1-standard-8 8 30
n1-standard-16 16 60
n1-standard-32 32 120

Jenis mesin ini hanya tersedia di endpoint regional. Pelajari lebih lanjut dukungannya untuk fitur AI Platform Prediction lainnya.

Pelajari harga untuk setiap jenis mesin. Baca selengkapnya tentang spesifikasi mendetail dari jenis mesin Compute Engine (N1) di dokumentasi Compute Engine.

Memformat data input

Format dasar untuk prediksi online adalah daftar instance data. Ini dapat berupa daftar nilai biasa atau anggota objek JSON, bergantung pada cara Anda mengonfigurasi input dalam aplikasi pelatihan Anda. Pelajari cara memformat input kompleks dan data biner untuk prediksi.

Contoh ini menunjukkan tensor input dan kunci instance ke model TensorFlow:

{"values": [1, 2, 3, 4], "key": 1}

Susunan string JSON bisa menjadi kompleks selama mengikuti aturan berikut:

  • Data instance tingkat teratas harus berupa objek JSON: kamus key-value pair.

  • Nilai individual dalam objek instance dapat berupa string, angka, atau daftar. Anda tidak dapat menyematkan objek JSON.

  • Daftar hanya boleh berisi item dari jenis yang sama (termasuk daftar lainnya). Anda tidak boleh mencampur nilai string dan numerik.

Anda meneruskan instance input untuk prediksi online sebagai isi pesan untuk panggilan projects.explain. Pelajari lebih lanjut persyaratan pemformatan isi permintaan prediksi.

  1. Untuk mengirimkan permintaan dengan gcloud, pastikan file input Anda adalah file JSON yang dipisahkan baris baru, dengan setiap instance sebagai objek JSON, satu instance per baris.

    {"values": [1, 2, 3, 4], "key": 1}
    {"values": [5, 6, 7, 8], "key": 2}
    

Meminta prediksi dan penjelasan

Minta prediksi dan penjelasan Anda:

gcloud beta ai-platform explain \
  --model $MODEL \
  --version $VERSION \
  --json-instances='your-data.txt' \
  --region us-central1

Memahami respons penjelasan

Setelah men-deploy model, Anda dapat menggunakan Explainable AI SDK untuk meminta penjelasan dan memvisualisasikan hasil atribusi fitur untuk data tabel dan gambar:

import explainable_ai_sdk

m = explainable_ai_sdk.load_model_from_ai_platform(PROJECT_ID, MODEL_NAME, VERSION, region=REGION)
explanations = m.explain([instance_dict])
explanations[0].visualize_attributions()

Untuk model tabular, atribusi diplot dalam diagram batang. Untuk model gambar, atribusi ditampilkan pada gambar input, menggunakan setelan visualisasi yang sama dengan yang Anda tentukan saat men-deploy model.

Untuk mengetahui detail tentang setiap kolom dalam respons penjelasan, lihat contoh respons lengkap dalam referensi API.

Pelajari cara mengurai respons penjelasan dengan melihat contoh notebook:

TensorFlow 2:

TensorFlow 1.15:

Memeriksa penjelasan

Contoh kode berikut membantu Anda memeriksa sekumpulan penjelasan dan melihat apakah Anda perlu menyesuaikan dasar pengukuran.

Dalam kode, Anda hanya perlu memperbarui nilai kunci input sesuai dengan yang ditentukan dalam file explanation_metadata.json.

{
    "inputs": {
      "YOUR_INPUT_KEY_VALUE": {
        "input_tensor_name": "YOUR_INPUT_TENSOR_NAME"
        "input_baselines": [0]
      }
    ...
}

Misalnya, jika nilai kunci input Anda adalah "data", nilai yang sama akan menjadi "data" di baris 4 cuplikan kode berikut:

def check_explanations(example, mean_tgt_value=None, variance_tgt_value=None):
  passed_test = 0
  total_test = 1
  attribution_vals = example['attributions_by_label'][0]['attributions']['YOUR-INPUT-KEY-VALUE']

  baseline_score = example['attributions_by_label'][0]['baseline_score']
  sum_with_baseline = np.sum(attribution_vals) + baseline_score
  predicted_val = example['attributions_by_label'][0]['example_score']

  # Check 1
  # The prediction at the input is equal to that at the baseline.
  #  Please use a different baseline. Some suggestions are: random input, training
  #  set mean.
  if abs(predicted_val - baseline_score) <= 0.05:
    print('Warning: example score and baseline score are too close.')
    print('You might not get attributions.')
  else:
    passed_test += 1

  # Check 2 (only for models using Integrated Gradient explanations)
  # Ideally, the sum of the integrated gradients must be equal to the difference
  # in the prediction probability at the input and baseline. Any discrepancy in
  # these two values is due to the errors in approximating the integral.
  if explain_method == 'integrated-gradients':
    total_test += 1
    want_integral = predicted_val - baseline_score
    got_integral = sum(attribution_vals)
    if abs(want_integral-got_integral)/abs(want_integral) > 0.05:
        print('Warning: Integral approximation error exceeds 5%.')
        print('Please try increasing the number of integrated gradient steps.')
    else:
        passed_test += 1

  print(passed_test, ' out of ', total_test, ' sanity checks passed.')

Saat mengurai penjelasan, Anda dapat menjalankan pemeriksaan ini pada setiap atribusi yang telah Anda terima:

for i in attributions_resp['explanations']:
  check_explanations(i)

Menggunakan error perkiraan untuk meningkatkan hasil

Metode atribusi fitur AI Explanations (sampel Shapley, gradien terpadu, dan XRAI) semuanya didasarkan pada varian nilai Shapley. Karena nilai Shapley sangat mahal secara komputasi, Penjelasan AI hanya memberikan perkiraan, bukan nilai tepatnya. Bersama dengan hasil atribusi fitur, Penjelasan AI juga menampilkan error perkiraan. Jika error perkiraan Anda melebihi 0,05, sebaiknya sesuaikan input untuk mengurangi error.

Anda dapat mengurangi error perkiraan dan mendapatkan nilai yang mendekati nilai yang tepat dengan mengubah input berikut:

  • Meningkatkan jumlah langkah integral atau jumlah jalur.
  • Mengubah dasar pengukuran input yang Anda pilih.
  • Menambahkan lebih banyak dasar pengukuran input. Dengan gradien terintegrasi dan metode XRAI, penggunaan dasar pengukuran tambahan akan meningkatkan latensi. Menggunakan dasar pengukuran tambahan dengan metode Shapley yang dijadikan sampel tidak akan meningkatkan latensi.

Meningkatkan langkah atau jalur

Untuk mengurangi error perkiraan, Anda dapat meningkatkan:

  • jumlah jalur untuk sampel Shapley
  • jumlah langkah integral untuk gradien terintegrasi atau XRAI

Anda menetapkan parameter ini saat membuat resource versi selama deployment model.

Menyesuaikan dasar pengukuran

Anda dapat menetapkan input_baselines di file explanation_metadata.json. Bagian ini memberikan contoh untuk data tabel dan gambar. Dasar pengukuran input dapat mewakili nilai median, minimum, maksimum, atau acak yang terkait dengan data pelatihan Anda.

Secara umum:

  • Memulai dengan satu dasar pengukuran yang mewakili nilai median.
  • Ubah dasar pengukuran ini menjadi dasar yang mewakili nilai acak.
  • Coba dua dasar pengukuran, yang masing-masing mewakili nilai minimum dan maksimum.
  • Tambahkan dasar pengukuran lain yang mewakili nilai acak.

Contoh untuk data tabular

Kode Python berikut membuat konten file metadata penjelasan untuk data tabel. Anda dapat menggunakan Shapley sampel atau gradien terintegrasi untuk mendapatkan atribusi fitur untuk data tabel. Kode ini adalah bagian dari contoh notebook untuk data tabular.

Perhatikan bahwa input_baselines adalah daftar tempat Anda dapat menentukan beberapa dasar pengukuran. Contoh ini hanya menetapkan satu dasar pengukuran. Dasar pengukuran adalah daftar nilai median untuk data pelatihan (dalam contoh ini train_data).

explanation_metadata = {
    "inputs": {
      "data": {
        "input_tensor_name": model.input.name,
        "input_baselines": [train_data.median().values.tolist()],
        "encoding": "bag_of_features",
        "index_feature_mapping": train_data.columns.tolist()
      }
    },
    "outputs": {
      "duration": {
        "output_tensor_name": model.output.name
      }
    },
  "framework": "tensorflow"
  }

Untuk menetapkan dua dasar pengukuran yang mewakili nilai minimum dan maksimum, tetapkan input_baselines sebagai berikut: [train_data.min().values.tolist(), train_data.max().values.tolist()]

Contoh untuk data gambar

Kode Python berikut membuat konten file metadata penjelasan untuk data gambar. Anda dapat menggunakan gradien terintegrasi untuk mendapatkan atribusi fitur untuk data gambar. Kode ini adalah bagian dari contoh notebook untuk data gambar.

Perhatikan bahwa input_baselines adalah daftar tempat Anda dapat menentukan beberapa dasar pengukuran. Contoh ini hanya menetapkan satu dasar pengukuran. Dasar pengukuran adalah daftar nilai acak. Menggunakan nilai acak untuk dasar pengukuran gambar adalah pendekatan yang baik jika gambar dalam set data pelatihan berisi banyak warna hitam putih.

Jika tidak, tetapkan input_baselines ke [0, 1] untuk mewakili gambar hitam putih.

random_baseline = np.random.rand(192,192,3)

explanation_metadata = {
    "inputs": {
      "data": {
        "input_tensor_name": "input_pixels:0",
        "modality": "image",
        "input_baselines": [random_baseline.tolist()]
      }
    },
    "outputs": {
      "probability": {
        "output_tensor_name": "dense/Softmax:0"
      }
    },
  "framework": "tensorflow"
  }

Langkah selanjutnya