İnsan Geribildiriminden Pekiştirmeli Öğrenme (RLHF)

Cahit Barkin Ozer
15 min readDec 2, 2024

--

Deeplearning.ai’daki “Reinforcement Learning from Human Feedback” kursunun Türkçe çevirisidir.

For English:

Giriş

İnternetteki veriler üzerinde eğitilen bir büyük dil modeli (LLM), internetin konuşma tonunu yansıttığı için zararlı, yanlış veya yararsız yanıtlar üretebilir. RLHF (İnsan Geri Bildirimiyle Güçlendirilmiş Öğrenme), bir LLM’in çıktısını insan tercihleri ve değerleriyle uyumlu hale getirmede kritik bir rol oynayan önemli bir ayar tekniğidir.

RLHF, modelin insanların tercih ettiği daha fazla yanıt üretmesi için eğitilmesini sağlamak amacıyla yanıtlar toplar. RLHF’de, başlangıç noktası olarak zaten talimatlarla ayarlanmış bir LLM kullanırsınız. Daha sonra, birden fazla tamamlaması olan aynı istemin insanlar tarafından etiketlenmiş tercihlerini gösteren bir veri kümesi toplarsınız ve bu veri kümesini bir ödül sinyali olarak veya bir ödül sinyali oluşturmak için kullanarak talimatlarla ayarlanmış bir LLM’i ince ayar yaparsınız. Sonuç, insan etiketleyicilerin tercihlerine daha iyi uyum sağlayan çıktılar veren bir LLM’dir.

Bu kursta, RLHF sürecini öğreneceğiz ve RLHF için basit veri kümelerini keşfetme, LLAMA modelini RLHF ile ayarlama ve ardından yeni ayarlanan modeli değerlendirme konusunda uygulamalı deneyim kazanacağız.

RLHF, çoğunlukla istenen çıktının açıklanmasının veya tarif edilmesinin zor olduğu görevlerde LLM’in performansını geliştirmek için kullanılır. RLHF, tüm doğruluk veya toksisite sorunlarını çözmez ancak bu modellerin kalitesini artırmanın önemli bir parçasıdır. Örneğin, Nemotron RLHF Llama3–70b modeli ve Llama3–70b modeli, yalnızca insan tercihlerine göre puanlanan bir sıralama sistemi olan LLM Arena Liderlik Tablosunda 10 modeli barındırmaktadır.

RLHF Nasıl Çalışır?

RLHF, bir Büyük Dil Modelinin (LLM) çıktısını kullanıcı niyeti ve tercihine daha iyi hizalamaya çalışmak için kullanabileceğimiz bir tekniktir. Diyelim ki bir modeli özetleme görevlerinde RLHF ile geliştirmek istiyoruz. Öncelikle özetlenmesi için bazı metin örnekleri toplar ve ardından insanlar her bir girdi için bir özet üretir.

İnsan yapımı özetlerden oluşan girdi metni ve özet çiftleri oluşturabilir ve bu çiftlerden oluşan bir grup üzerinde bir modeli doğrudan eğitebiliriz. Ancak sorun şu ki, bir metni özetlemenin tek bir doğru yolu yoktur, çünkü doğal diller esnektir ve bir şeyi ifade etmenin genellikle birçok yolu vardır. Varlık çıkarımı veya sınıflandırma gibi bazı problemler doğru cevaplara sahipken, bazen bir modele öğretmek istediğimiz görev daha net bir objektif en iyi yanıta ihtiyaç duyar. Belirli bir girdi metni için en iyi özeti bulmaya çalışmak yerine, bu problemi biraz farklı bir şekilde ele alacağız.

RLHF üç aşamadan oluşur: Öncelikle bir tercih veri kümesi oluşturulur, ardından bu tercih veri kümesi kullanılarak gözetimli öğrenme ile bir ödül modeli eğitilir. Son olarak, ödül modeli bir pekiştirmeli öğrenme döngüsünde kullanılarak temel büyük dil modelimiz ince ayar yapılır.

Bir tercih veri kümesi, insanların aynı girdi için iki çıktıdan birini seçmeleri için değerlendirilmesiyle oluşturulur. Bu en zor kısımdır çünkü ne elde etmeye çalıştığınızı sorarak kriterlerinizi tanımlamanız gerekir. Modeli daha kullanışlı, daha az toksik, daha pozitif vb. yapmak ister misiniz?

Daha sonra, bu tercih veri kümesini alıp bir ödül modeli eğitirsiniz, genellikle bir LLM. Çıkarımda, bu ödül modelinin istemi ve tamamlamayı almasını ve tamamlamanın ne kadar iyi olduğunu gösteren bir skaler döndürmesini istiyoruz.

Pekiştirmeli öğrenmeyi hatırlayalım. Pekiştirmeli öğrenmede, bir ajan (agent) bir eylem gerçekleştirerek ortamı değiştirir ve tanımlanmış bir puanlama fonksiyonuna göre bir ödül alır; bu süreç devam eder. Mevcut durumu eylem kümesine eşleyen fonksiyona Politika (Policy) denir ve pekiştirmeli öğrenmenin amacı, ödülü en üst düzeye çıkaran bir politika öğrenmektir.

Bizim durumumuzda Ajan, büyük dil modeli (LLM); durum, mevcut LLM bağlamı; ve eylemler, oluşturulan tokenlardır. LLM her bir tamamlama oluşturduğunda, üretilen metnin ne kadar uyumlu olduğunu belirten bir ödül modeli tarafından bir ödül alır. Ödülü maksimize eden politikayı öğrenmek, ödül modelinden yüksek puanlar alan tamamlama üreten bir büyük dil modeli elde etmeye dayanır. Politika, politika gradyanı yöntemi (policy gradient) ve Yakınsal Politika Optimizasyonu (PPO: Proximal Policy Optimization) algoritması kullanılarak öğrenilir. Bu, standart bir pekiştirmeli öğrenme algoritmasıdır.

Bir istem (prompt), istem veri kümesinden örneklenir, büyük dil modeline verilerek bir tamamlama üretilir ve bu istem-tamamlama çifti ödül üretmek için ödül modeline iletilir. Temel büyük dil modelinin ağırlıkları, ödül kullanılarak PPO veya Politika olarak da bilinen ile güncellenir. Her güncellemede, politika bir sonraki metin çıktısını daha iyi üretmek için biraz daha iyileşir. Pratikte, genellikle ayarlanan modelin temel modelden çok uzaklaşmamasını sağlamak için bir ceza terimi eklenir.

Daha fazla ayrıntı istiyorsanız OpenAI ve Deepmind’ın “Derin Güçlendirmeli Öğrenme İnsan Tercihlerinden” ve Ouyang, Wu ve Jiang’ın “İnsan geri bildirimleriyle talimatları takip etmek için dil modellerini eğitme” makalelerine bakabilirsiniz.

Parametre açısından verimli ince ayar, temel modeli yeniden eğitir ancak yalnızca model parametrelerinin küçük bir alt kümesini günceller ve diğer tüm parametreleri dondururken tam ince ayar, temel modeli tüm parametreleri (model ağırlıklarını) güncelleyerek yeniden eğitir.

RL Eğitimi İçin Veri Kümeleri

Tercih veri kümesi, ödül modelini ayarlamak için kullanılır. Genellikle RLHF’nin en zor kısımlarından biridir çünkü insanlar tarafından açıklanır ve farklı insanların farklı tercihleri ​​vardır.

preference_dataset_path = 'sample_preference.jsonl'
import json
preference_data = []
with open(preference_dataset_path) as f:
for line in f:
preference_data.append(json.loads(line))
sample_1 = preference_data[0]
print(type(sample_1))
# Bu sözlüğün dört anahtarı var
print(sample_1.keys())
sample_1['input_text']
# Listedeki diğer örneklerle deneyin ve tüm verilerin aynı şekilde sona erdiğini keşfedin
preference_data[2]['input_text'][-50:]
print(f"candidate_0:\n{sample_1.get('candidate_0')}\n")
print(f"candidate_1:\n{sample_1.get('candidate_1')}\n")
print(f"choice: {sample_1.get('choice')}")
prompt_dataset_path = 'sample_prompt.jsonl'
prompt_data = []
with open(prompt_dataset_path) as f:
for line in f:
prompt_data.append(json.loads(line))
# Bu veri setinde kaç tane istem olduğunu kontrol edin
len(prompt_data)
# İstem veri kümesindeki bilgileri daha iyi bir görselleştirmeyle yazdırma işlevi
def print_d(d):
for key, val in d.items():
print(f"key:{key}\nval:{val}\n")
print_d(prompt_data[0])
# Listeden başka bir komutla deneyin
print_d(prompt_data[1])

RLHF ile LLM’i Ayarlamak

Orange are components or steps, blue are artifacts

RLHF iş akışını başlatalım ve büyük bir dil modelini ayarlayalım. Makine öğrenimi hatları, kapsayıcılara dayalı taşınabilir ve ölçeklenebilir makine öğrenimi iş akışlarıdır. Bir veri kümesi hazırlamak, bir modeli eğitmek ve bu modeli değerlendirmek gibi iş akışınızın her adımı, hattınızdaki bileşenlerdir. Bir hat, makine öğrenimi iş akışınızı otomatikleştirmenize ve yeniden üretmenize yardımcı olmak için tüm bu adımları tek bir nesneye kapsüllemenin kullanışlı bir yoludur. İnsan geri bildirim hattından pekiştirmeli öğrenme biraz daha karmaşıktır. Şuna benzeyebilir:

Tercih veri kümesi bir ödül modelini eğitmek için kullanılır. Ödül modeli, temel büyük dil modelini pekiştirmeli öğrenmeyle ayarlamak için istem veri kümesiyle kullanılır. Ve sonra pekiştirmeli öğrenmeyle ayarlanmış büyük bir dil modeli elde ederiz. Ve sonra ayarlanmış büyük bir dil modeli ve bazı çıktı eğitim eğrileri de elde ederiz. Gerçekte, yürüteceğimiz işlem hattı çok daha fazla adıma sahiptir ancak bunlara kısa süre sonra değineceğiz. RLHF işlem hattı, OSS Google Cloud Pipelines Bileşenleri Kütüphanesi’nde bulunur. Bu nedenle işlem hattını çalıştırmak için önce onu içe aktaracak, derleyecek ve çalıştıracaksınız. Bu nedenle birkaç farklı kütüphanenin kurulu olduğundan emin olmamız gerekecek.

!pip3 install google-cloud-pipeline-components
!pip3 install kfp
# işlem HATTI DERLEMESİ

# İçe Aktar (RLFH şu anda önizleme aşamasındadır)
from google_cloud_pipeline_components.preview.llm \
import rlhf_pipeline

# KubeFlow işlem hatlarından içe aktar
from kfp import compiler

# Yaml dosyasına giden bir yol tanımlayın
RLHF_PIPELINE_PKG_PATH = "rlhf_pipeline.yaml"

# Derleme işlevini yürütün
compiler.Compiler().compile(
pipeline_func=rlhf_pipeline,
package_path=RLHF_PIPELINE_PKG_PATH
)

# YAML dosyasının ilk satırlarını yazdır
!head rlhf_pipeline.yaml

Projeleriniz için bile bu RLHF işlem hattı bileşenini veya karşılık gelen YAML dosyasını düzenlemeyeceksiniz. İşlem hattı zaten Vertex ekibi tarafından yazılmış ve platform ve RLHF için optimize edilmiş ve YAML dosyası otomatik olarak oluşturulan bir şeydir. YAML dosyasını alacak ve ayrıca kullanım durumumuza özgü tüm parametreleri alacak bir işlem hattı işi tanımlayabiliriz.

Vertex AI işlem hattı işinin tanımlanması

Vertex AI RLHF İşlem Hattı

İşlem hattının sağ üst tarafındaki belirli bir kısmına yakınlaştırırsak:

Mavi kutular, kodları içlerinde yürütülen bileşenleri temsil eder. Sarı şekil, işlem hattımızın sonucuyla oluşturulan her şey olan eserlerdir.

Eğitilen ödül modeli, ödül modeli işlem hattıdır. Güçlendirici, temel büyük modeli ayarlayan güçlendirme öğrenme döngüsüdür. Ayrıca, ödül modeli eğitmeni bileşeninin TensorBoard Metrics Artifact’te belirtilen bazı ölçümleri çıkardığını da görebilirsiniz. Vertex AI, işlem hattınızın tüm bileşenlerini görmeniz için size bir görselleştirme aracı sağlar.

Eğitim ve değerlendirme verilerinin yerini tanımlanması

Daha önce, veri kümeleri küçük JSONL dosyalarından yükleniyordu, ancak tipik eğitim işleri için veri kümeleri çok daha büyüktür ve genellikle bulut depolamada (bu durumda Google Cloud Storage) saklanır. Not: Üç veri kümesinin aynı Google Cloud Storage kovasında saklandığından emin olun.

İlk 3 parametre tercih veri kümemize, istem veri kümemize ve değerlendirme veri kümemize giden yoldur. Değerlendirme veri kümesi isteğe bağlıdır, yani ayarlama tamamlandıktan sonra bu değerlendirme veri kümesi bir dizi istem için bir dizi tamamlamanın oluşturulacağı bir toplu çıkarım işi gerçekleştirmek için kullanılacaktır.

parameter_values={
"preference_dataset": \
"gs://vertex-ai/generative-ai/rlhf/text_small/summarize_from_feedback_tfds/comparisons/train/*.jsonl",
"prompt_dataset": \
"gs://vertex-ai/generative-ai/rlhf/text_small/reddit_tfds/train/*.jsonl",
"eval_dataset": \
"gs://vertex-ai/generative-ai/rlhf/text_small/reddit_tfds/val/*.jsonl",
...

Küçük JSONL dosyalarını veri kümeleri olarak belleğe yüklüyoruz ancak gerçek bir işlem hattında veri kümeleri çok daha büyüktür ve Google Cloud Storage (Google’ın Cloud Storage’ı) adı verilen bir yerde bulunmaları gerekir; burada resimleri, CSV dosyalarını, metin dosyalarını, model eserlerini, JSONL dosyalarını depolayabilirsiniz. Google Cloud Storage yolları gs:// önekiyle başlar. Google Cloud Storage’daki her şey kovalarda depolanır.

Ayarlanacak temel modelin seçimi

Bu durumda, Llama-2 temel modelini ayarlıyoruz, ayarlanacak LLM’ye large_model_reference adı verilir. Bu kursta, llama-2–7b’yi ayarlıyoruz, ancak T5x veya text-bison@001 gibi modelleri ayarlamak için Vertex AI’da bir RLHF işlem hattı da çalıştırabilirsiniz.

parameter_values={
"large_model_reference": "llama-2-7b",
...

Eğitim adımları deneyseldir çünkü veri boyutları farklıdır, varsayılan değerler ödül modeli eğitimi için 20–30 dönem ve pekiştirmeli öğrenme eğitimi için 10–20 dönemdir. Kazanma oranını değiştiremezsiniz çünkü eşleşmeleri gerekir ancak öğrenme oranı çarpanını değiştirerek onları etkileyebilirsiniz. KL katsayısı (coefficient), Ödül Hacklemesi (Reward Hacking) adı verilen bir şeyi önlemeye yardımcı olan bir düzenleme terimidir. Örneğin, olumlu duygular yüksek ödüllere sahipse model harika, harika, mükemmel demeye başlar ve yüksek bir puan alır ancak insanlar için anlamlı değildir.

Ödül Modeli Eğitim Adımlarının sayısının hesaplanması

reward_model_train_steps, ödül modelini eğitirken kullanılacak adım sayısıdır. Bu, tercih veri kümenizin boyutuna bağlıdır. En iyi sonuçlar için modelin tercih veri kümesi üzerinde 20–30 dönem boyunca eğitilmesini öneririz.

steps_per_epoch = ⌈dataset_size / batch_size⌉

train_steps = steps_per_epoch x num_epochs

RLHF işlem hattı parametreleri, dönem sayısını değil, eğitim adımlarının sayısını ister. Bu işlem hattı için toplu boyutun toplu başına 64 örnek olarak sabitlendiği varsayıldığında, dönemlerden eğitim adımlarına nasıl geçileceğine dair bir örnek aşağıdadır.

# Tercih veri kümesi boyutu
PREF_DATASET_SIZE = 3000

# Toplu iş boyutu 64 olarak sabitlendi
BATCH_SIZE = 64

import math
REWARD_STEPS_PER_EPOCH = math.ceil(PREF_DATASET_SIZE / BATCH_SIZE)
print(REWARD_STEPS_PER_EPOCH)

REWARD_NUM_EPOCHS = 30

# Ödül modeli eğitiminde adım sayısını hesaplayın
reward_model_train_steps = REWARD_STEPS_PER_EPOCH * REWARD_NUM_EPOCHS

print(reward_model_train_steps)

Pekiştirmeli öğrenme eğitim adımlarının sayısını hesaplayın

reinforced_learning_train_steps parametresi, temel modeli ayarlarken gerçekleştirilecek pekiştirmeli öğrenme adımlarının sayısıdır. Eğitim adımlarının sayısı, istem veri kümenizin boyutuna bağlıdır.

  • Genellikle, bu model yaklaşık 10–20 dönem boyunca istem veri kümesi üzerinde eğitim almalıdır.
  • Ödül hackleme: Çok fazla eğitim adımı verilirse, politika modeli ödülü kullanmanın ve istenmeyen davranış sergilemenin bir yolunu bulabilir.
PROMPT_DATASET_SIZE = 2000

BATCH_SIZE = 64

import math
RL_STEPS_PER_EPOCH = math.ceil(PROMPT_DATASET_SIZE / BATCH_SIZE)
print(RL_STEPS_PER_EPOCH)

RL_NUM_EPOCHS = 10

reinforcement_learning_train_steps = RL_STEPS_PER_EPOCH * RL_NUM_EPOCHS

print(reinforcement_learning_train_steps)

Talimatın Tanımlanması

  • Temel modeli ayarlamak için kullanmak istediğiniz göreve özgü talimatı seçin. Bu örnek için talimat “50 kelimeden az özetle.”dir.
  • Farklı talimatlar seçebilirsiniz, örneğin, “Aşağıdaki soruya veya yoruma bir yanıt yazın.” Ayrıca, hem yanıtların hem de insan tercihlerinin bu talimata dayanması için, aynı talimatı istemde ekleyerek tercih veri kümenizi toplamanız gerektiğini unutmayın.
# Sözlük için tamamlanmış değerler
parameter_values={
"preference_dataset": \
"gs://vertex-ai/generative-ai/rlhf/text_small/summarize_from_feedback_tfds/comparisons/train/*.jsonl",
"prompt_dataset": \
"gs://vertex-ai/generative-ai/rlhf/text_small/reddit_tfds/train/*.jsonl",
"eval_dataset": \
"gs://vertex-ai/generative-ai/rlhf/text_small/reddit_tfds/val/*.jsonl",
"large_model_reference": "llama-2-7b",
"reward_model_train_steps": 1410,
"reinforcement_learning_train_steps": 320, # yukarıdaki hesaplamalardan elde edilen sonuçlar
"reward_model_learning_rate_multiplier": 1.0,
"reinforcement_learning_rate_multiplier": 1.0,
"kl_coeff": 0.1, # ödül hilesini azaltmak için artırıldı
"instruction":\
"Summarize in less than 50 words"}

Tam veri kümesiyle ‘parameter_values’ sözlüğü eğitilmesi

  • Değerlendirmede en iyi sonuçları elde etmek için tam veri kümesiyle eğitim ayarlarını düzenleyin. Yeni değerlere bir göz atın; bu sonuçlar işlem hattındaki çeşitli eğitim deneylerinden alınmıştır ve en iyi parametre değerleri burada gösterilmektedir.
parameter_values={
"preference_dataset": \
"gs://vertex-ai/generative-ai/rlhf/text/summarize_from_feedback_tfds/comparisons/train/*.jsonl",
"prompt_dataset": \
"gs://vertex-ai/generative-ai/rlhf/text/reddit_tfds/train/*.jsonl",
"eval_dataset": \
"gs://vertex-ai/generative-ai/rlhf/text/reddit_tfds/val/*.jsonl",
"large_model_reference": "llama-2-7b",
"reward_model_train_steps": 10000,
"reinforcement_learning_train_steps": 10000,
"reward_model_learning_rate_multiplier": 1.0,
"reinforcement_learning_rate_multiplier": 0.2,
"kl_coeff": 0.1,
"instruction":\
"Summarize in less than 50 words"}

Vertex AI işlem hattını çalıştırmak için Google Cloud’u kurun

Vertex AI bu sınıf ortamında zaten yüklü. Bunu projenizde çalıştırıyor olsaydınız, Vertex AI SDK’yi şu şekilde yüklerdiniz:

!pip3 install google-cloud-aiplatform
# Utils'te kimlik doğrulaması yapın
from utils import authenticate
credentials, PROJECT_ID, STAGING_BUCKET = authenticate()

# RLFH işlem hattı bu bölgede mevcuttur
REGION = "europe-west4"

İşlem hattı işini Vertex AI’da çalıştırın

Artık değerler sözlüğümüzü oluşturduğumuza göre, bir PipelineJob oluşturabiliriz. Bu, RLHF işlem hattının Vertex AI üzerinde yürütüleceği anlamına gelir. Yani burada not defterinde yerel olarak değil, Google Cloud’daki bir sunucuda çalışıyor.

import google.cloud.aiplatform as aiplatform
aiplatform.init(project = PROJECT_ID,
location = REGION,
credentials = credentials)
# YAML dosyasının yoluna bakın
RLHF_PIPELINE_PKG_PATH

İşlem hattı işini oluşturun ve çalıştırın

  • Kendi projeniz üzerinde çalışıyor olsaydınız, işlem hattı işini nasıl oluşturup çalıştıracağınız aşağıda gösterilmiştir.
  • Bu işin birden fazla hızlandırıcı (TPU/GPU) ile çalıştırılması yaklaşık bir tam gün sürer ve bu nedenle bunu bu sınıfta çalıştırmayacağız.
# işlem hattı işini oluşturmak için
job = aiplatform.PipelineJob(
display_name="tutorial-rlhf-tuning",
pipeline_root=STAGING_BUCKET,
template_path=RLHF_PIPELINE_PKG_PATH,
parameter_values=parameter_values)

# işlem hattı işini çalıştırmak için
job.run()

İçerik ekibi, Llama-2 modelini ayarlamak için bu RLHF eğitim kanalını çalıştırdı ve bir sonraki derste, ayarlanmış modelin performansını orijinal temel modelle karşılaştırmak için günlük verilerini değerlendireceksiniz.

Ayarlanmış Modelin Değerlendirilmesi

RLHF ile nihai modelimiz, öncelikli olarak ilgilendiğimiz görevi orijinal büyük dil modelinden (LLM) daha iyi gerçekleştiren yeni bir büyük dil modeli oluşturmaktır. LLM değerlendirmesi, hâlâ araştırma gerektiren oldukça karmaşık bir alandır. Öncelikle, modelin öğrenip öğrenmediğini görmek için kayba (loss) bakarız. İkinci olarak, algoritmik değerlendirme yöntemleri olan otomasyon metriklerine bakarız. Yan yana (Side-by-Side) değerlendirme manuel olarak veya otomatikleştirilmiş bir şekilde yapılabilir. Otomatik Yan Yana (Auto SxS), insan etiketli veriler yerine bir hakem modeli kullanarak iki modelin performansını karşılaştırır. ROUGE, insan uyumu (human alignment) için iyi bir metrik değildir; sadece metinlerin ne kadar benzer olduğunu gösterir. Hatta bazı araştırmalar, modeli ROUGE’a göre daha yoğun şekilde optimize ettiğimizde, RLHF durumunda model performansının daha da kötüleştiğini göstermiştir.

TensorBoard, deney değişkenlerini görselleştirmek için kullanılan açık kaynaklı bir projedir.

Rank_loss’a baktığımızda azalan ve yakınsayan, sıfıra yakın bir noktada sabit kalan bir grafik görmeyi bekliyoruz.

Değerlendirme veri kümesi yalnızca özetleme istemlerinden oluşan bir veri kümesidir, tamamlama yoktur. Bu veri kümesi yalnızca toplu çıkarım (batch inference) işi için ayarlanmış modele geçirilir. Modelimiz ayarlandıktan sonra, bu değerlendirme veri kümesindeki tüm istemler için tamamlamalar üretiriz. Hiçbir metrik hesaplamayız. Yalnızca modeli çağırırız ve bir tür metin çıktısı üretiriz.

!pip install tensorboard
%load_ext tensorboard
port = %env PORT1
%tensorboard --logdir reward-logs --port $port --bind_all

# Bu dizinde neler olduğuna bakın
%ls reward-logs

port = %env PORT2
%tensorboard --logdir reinforcer-logs --port $port --bind_all

port = %env PORT3
%tensorboard --logdir reinforcer-fulldata-logs --port $port --bind_all

# Önceki derste tanımlanan 'parameter_values' sözlüğü
parameter_values={
"preference_dataset": \
"gs://vertex-ai/generative-ai/rlhf/text_small/summarize_from_feedback_tfds/comparisons/train/*.jsonl",
"prompt_dataset": \
"gs://vertex-ai/generative-ai/rlhf/text_small/reddit_tfds/train/*.jsonl",
"eval_dataset": \
"gs://vertex-ai/generative-ai/rlhf/text_small/reddit_tfds/val/*.jsonl",
"large_model_reference": "llama-2-7b",
"reward_model_train_steps": 1410,
"reinforcement_learning_train_steps": 320,
"reward_model_learning_rate_multiplier": 1.0,
"reinforcement_learning_rate_multiplier": 1.0,
"kl_coeff": 0.1,
"instruction":\
"Summarize in less than 50 words"}


"""
Note: Here, we are using 'text_small' for our datasets for learning purposes. However for the results that we're evaluating in this lesson, the team used the full dataset with the following hyperparameters:
"""
parameter_values={
"preference_dataset": \
"gs://vertex-ai/generative-ai/rlhf/text/summarize_from_feedback_tfds/comparisons/train/*.jsonl",
"prompt_dataset": \
"gs://vertex-ai/generative-ai/rlhf/text/reddit_tfds/train/*.jsonl",
"eval_dataset": \
"gs://vertex-ai/generative-ai/rlhf/text/reddit_tfds/val/*.jsonl",
"large_model_reference": "llama-2-7b",
"reward_model_train_steps": 10000,
"reinforcement_learning_train_steps": 10000,
"reward_model_learning_rate_multiplier": 1.0,
"reinforcement_learning_rate_multiplier": 0.2,
"kl_coeff": 0.1,
"instruction":\
"Summarize in less than 50 words"}

# Ayarlanmış ve ayarlanmamış modeli kullanarak değerlendirin
import json
eval_tuned_path = 'eval_results_tuned.jsonl'
eval_data_tuned = []
with open(eval_tuned_path) as f:
for line in f:
eval_data_tuned.append(json.loads(line))
# Baskı amaçlı ithalat
from utils import print_d
# Ayarlanmış modelin ürettiği sonuca bakın
print_d(eval_data_tuned[0])
eval_untuned_path = 'eval_results_untuned.jsonl'
eval_data_untuned = []
with open(eval_untuned_path) as f:
for line in f:
eval_data_untuned.append(json.loads(line))
# Ayarlanmamış modelin ürettiği sonuca bakın
print_d(eval_data_untuned[0])

# Sonuçları bir veri çerçevesinde yan yana inceleyin

# Tüm istemleri ayıkla
prompts = [sample['inputs']['inputs_pretokenized']
for sample in eval_data_tuned]

# Ayarlanmamış modelden tamamlamalar
untuned_completions = [sample['prediction']
for sample in eval_data_untuned]

# Ayarlanmış modelden tamamlamalar
tuned_completions = [sample['prediction']
for sample in eval_data_tuned]

import pandas as pd

results = pd.DataFrame(
data={'prompt': prompts,
'base_model':untuned_completions,
'tuned_model': tuned_completions})

pd.set_option('display.max_colwidth', None)

# Sonuçları yazdır
results

RLAIF: Yapay Zeka Geribildiriminden Güçlendirme Öğrenmesini Ölçeklendirme makalesi, büyük dil modelleri tarafından açıklanan tercih veri kümeleri oluşturduğumuz ilginç bir teknik öneriyor. Benzer şekilde, otomatik yan yana (AutoSxS), bir insan etiketleyici yerine bir hakem modeli kullanarak iki modelin performansını karşılaştırır. Bir LLM hangisinin daha iyi olduğuna karar verir ve nedenini açıklar.

Ekstra: Google Cloud Kurulumu

Google Cloud Kurulumu

Bu isteğe bağlı laboratuvar, projelerinizde Google Cloud ve Vertex AI’yı kullanmak için atmanız gereken adımları ana hatlarıyla açıklamaktadır.
Not: Bunu kendiniz denemek için lütfen bu not defterini indirin ve yerel bilgisayarınızda çalıştırın.

Bir Google Cloud Projesi Oluşturun

Google Cloud projeleri, API’leri yönetme, faturalandırmayı etkinleştirme, işbirlikçileri ekleme ve kaldırma ve Google Cloud kaynakları için izinleri yönetme dahil olmak üzere tüm Google Cloud hizmetlerini oluşturma, etkinleştirme ve kullanmanın temelini oluşturur. Google Cloud araçlarını kullanımınız her zaman bir projeyle ilişkilendirilir. Cloud Console’u ilk ziyaret ettiğinizde yeni bir proje oluşturmanız istenecektir 90 günlük 300$ Ücretsiz Deneme içeren ücretsiz bir proje oluşturabileceğinizi unutmayın.

Faturalandırmayı Ayarlayın

Bir Bulut Faturalandırma hesabı, belirli bir kaynak kümesi için kimin ödeme yapacağını tanımlamak için kullanılır ve bir veya daha fazla projeye bağlanabilir. Proje kullanımı, bağlı Bulut Faturalandırma hesabına ücretlendirilir. Projeniz içinde, soldaki menüden “Faturalandırma”yı seçerek faturalandırmayı yapılandırabilirsiniz.

Google Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Faturalandırmanın etkinleştirildiğini nasıl onaylayacağınızı öğrenmek için buraya tıklayın.

API’lerin Etkinleştirilmesi

Faturalandırma hesabıyla bir proje kurduğunuzda, kullanmak istediğiniz tüm hizmetleri etkinleştirmeniz gerekecektir.

  • Vertex AI
  • BigQuery
  • IAM

Hizmet Hesabı Oluşturulması

Bir hizmet hesabı, bir kişi yerine bir uygulama veya hesaplama iş yükü (örneğin bir Compute Engine örneği) tarafından kullanılan özel bir hesap türüdür. Bir hizmet hesabı, hesaba özgü olan e-posta adresiyle tanımlanır. Daha fazla bilgi edinmek için bu tanıtım videosunu izleyin. Bir hizmet hesabı oluşturmanız ve kullanmak istediğiniz Google Cloud hizmetlerine erişim vermeniz gerekecektir.

1. Hizmet Hesabı Oluştur sayfasına gidin ve projenizi seçin

2. Hesaba bir isim verin (herhangi bir isim seçebilirsiniz)

Hesaba aşağıdaki izinleri verin

Hizmet Hesabı Oluşturma anahtarı

Hizmet hesabınızı oluşturduktan sonra bir anahtar oluşturmanız gerekiyor.

1. Yeni oluşturduğunuz servis hesabınızı seçin ve tıklayın. ANAHTAR EKLE -> yeni anahtar oluştur.

2. JSON anahtar türünü seçin ve oluştur’a tıklayın

Oluştur’a tıklamak bir hizmet hesabı anahtar dosyasını indirir. Anahtar dosyasını indirdikten sonra tekrar indiremezsiniz.

Kimlik bilgileri oluşturun

Vertex AI hizmetlerini kullanmak için kimlik bilgilerinizle kimlik doğrulaması yapmanız gerekecektir. Az önce indirdiğiniz JSON dosyasını kullanarak bir kimlik bilgileri nesnesi oluşturacaksınız.

from google.auth.transport.requests import Request
from google.oauth2.service_account import Credentials
# Hizmet hesabı anahtar dosyanıza giden yol
key_path = 'your_key.json' #Google Cloud'dan hizmet hesabınızla ilişkili JSON anahtarına giden yol
# Kimlik bilgileri nesnesi oluştur

credentials = Credentials.from_service_account_file(
key_path,
scopes=['https://www.googleapis.com/auth/cloud-platform'])

if credentials.expired:
credentials.refresh(Request())

Bir Google Cloud Storage Kovası Ayarlayın

Cloud Storage, Google Cloud’un nesne depolamasıdır. Nesne depolama, görüntüleri, CSV dosyalarını, TXT dosyalarını ve kaydedilmiş model eserlerini, hemen hemen her şeyi depolayabileceğiniz anlamına gelir! Cloud Storage, verilerinizi tutan bir “kova” kavramına sahiptir. Cloud Storage’da depoladığınız her şey bir kovada bulunmalıdır. Bir kovada, verilerinizi düzenlemek için klasörler oluşturabilirsiniz. Cloud Storage’daki her dosyanın, tıpkı yerel dosya sisteminizdeki bir dosya gibi bir yolu vardır. Ancak Cloud Storage yolları her zaman gs:// ile başlar

Yeni bir kova oluştur

Cloud Console’un Cloud Storage bölümüne gitmek için buraya tıklayın veya Cloud Console’daki hamburger menüsünden Cloud Storage > Buckets’ı seçerek manuel olarak oraya gidin.

OLUŞTUR’u seçin

Kovaya bir ad verin, bölgeyi ayarlayın ve OLUŞTUR’a tıklayın.
Genel olarak, seçilecek en iyi bölge, bulunduğunuz yere ve bu verileri kullanmak istediğiniz hizmetin gereksinimlerine bağlı olacaktır.
ABD veya AB çoklu bölgesi iyi varsayılanlardır.

Kovanızı oluşturduktan sonra dosyaları yükleyebilir veya dizinler oluşturabilirsiniz.

Kovanıza giden yol gs://{kovanızın_adı}

Vertex AI’ya Bağlanın

Bir projeniz ve kimlik bilgileriniz hazır olduğunda Vertex AI araçlarını kullanabilirsiniz.

Projenizin ID’sini kopyalayıp aşağıdaki PROJECT_ID alanına yapıştırın.

PROJECT_ID = 'your_project_ID'
REGION = 'us-central1'
import google.cloud.aiplatform as aiplatform

# Vertex'i başlat
aiplatform.init(project = PROJECT_ID, location = REGION, credentials = credentials)

Kaynak

Deeplearning.ai, (2024), Reinforcement Learning from Human Feedback

[https://www.deeplearning.ai/short-courses/reinforcement-learning-from-human-feedback/]

--

--

Cahit Barkin Ozer
Cahit Barkin Ozer

Written by Cahit Barkin Ozer

Üretken YZ başta olmak üzere teknoloji alanındaki yenilikleri öğrenip sizlerle paylaşıyorum. Youtube Kanalım: https://www.youtube.com/@cbarkinozer

No responses yet