Q-Learning ialah algoritma tanpa model penting dalam pembelajaran pengukuhan yang memfokuskan pada pembelajaran nilai atau "nilai-Q" tindakan dalam keadaan tertentu. Pendekatan ini berfungsi dengan baik dalam persekitaran yang tidak dapat diramalkan kerana ia tidak memerlukan model persekitaran sekeliling yang telah ditetapkan. Ia cekap menyesuaikan diri dengan transformasi rawak dan pelbagai ganjaran, menjadikannya sesuai untuk senario dengan hasil yang tidak pasti. Fleksibiliti ini menjadikan Q-Learning sebagai alat yang berkuasa untuk aplikasi yang memerlukan pembuatan keputusan adaptif tanpa pengetahuan awal tentang dinamik persekitaran.
Q-Learning ialah algoritma tanpa model penting dalam pembelajaran pengukuhan yang memfokuskan pada pembelajaran nilai atau "nilai-Q" sesuatu tindakan dalam keadaan tertentu. Pendekatan ini berfungsi dengan baik dalam persekitaran yang tidak dapat diramalkan kerana ia tidak memerlukan model persekitaran sekeliling yang telah ditetapkan. Ia cekap menyesuaikan diri dengan transformasi rawak dan pelbagai ganjaran, menjadikannya sesuai untuk senario dengan hasil yang tidak pasti. Fleksibiliti ini menjadikan Q-Learning sebagai alat yang berkuasa untuk aplikasi yang memerlukan pembuatan keputusan adaptif tanpa pengetahuan awal tentang dinamik persekitaran.
Pembelajaran Q berfungsi dengan mengemas kini jadual nilai Q untuk setiap tindakan di setiap negeri. Ia menggunakan persamaan Bellman untuk mengemas kini nilai ini secara berulang berdasarkan ganjaran yang diperhatikan dan anggaran ganjaran masa depan mereka. Dasar - strategi untuk memilih tindakan - diperoleh daripada nilai-Q ini.
Kod yang disediakan digunakan sebagai fungsi latihan Q-Learner. Ia menggunakan persamaan Bellman untuk menentukan peralihan yang paling cekap antara keadaan.
def train_Q(self,s_prime,r): self.QTable[self.s,self.action] = (1-self.alpha)*self.QTable[self.s, self.action] + \ self.alpha * (r + self.gamma * (self.QTable[s_prime, np.argmax(self.QTable[s_prime])])) self.experiences.append((self.s, self.action, s_prime, r)) self.num_experiences = self.num_experiences + 1 self.s = s_prime self.action = action return action
Aspek utama pembelajaran Q ialah mengimbangi penerokaan (mencuba tindakan baharu untuk menemui ganjarannya) dan eksploitasi (menggunakan maklumat yang diketahui untuk memaksimumkan ganjaran). Algoritma sering menggunakan strategi seperti ε-tamak untuk mengekalkan keseimbangan ini.
Mulakan dengan menetapkan kadar operasi rawak untuk mengimbangi penerokaan dan eksploitasi. Laksanakan kadar pereputan untuk mengurangkan rawak secara beransur-ansur apabila jadual Q mengumpul lebih banyak data. Pendekatan ini memastikan bahawa dari semasa ke semasa, apabila lebih banyak bukti terkumpul, algoritma semakin beralih kepada mengeksploitasi.
if rand.random() >= self.random_action_rate: action = np.argmax(self.QTable[s_prime,:]) #Exploit: Select Action that leads to a State with the Best Reward else: action = rand.randint(0,self.num_actions - 1) #Explore: Randomly select an Action. # Use a decay rate to reduce the randomness (Exploration) as the Q-Table gets more evidence self.random_action_rate = self.random_action_rate * self.random_action_decay_rate
Dyna-Q ialah lanjutan inovatif daripada algoritma Q-Learning tradisional dan berada di barisan hadapan dalam menggabungkan pengalaman sebenar dengan perancangan simulasi. Pendekatan ini meningkatkan proses pembelajaran dengan ketara dengan menyepadukan interaksi sebenar dan pengalaman simulasi, membolehkan ejen menyesuaikan diri dengan cepat dan membuat keputusan termaklum dalam persekitaran yang kompleks. Dengan memanfaatkan pembelajaran langsung daripada maklum balas alam sekitar dan cerapan yang diperoleh melalui simulasi, Dyna-Q menyediakan strategi yang komprehensif dan berkesan untuk menangani cabaran di mana data dunia sebenar adalah terhad atau mahal untuk diperoleh.
def train_DynaQ(self,s_prime,r): self.QTable[self.s,self.action] = (1-self.alpha)*self.QTable[self.s, self.action] + \ self.alpha * (r + self.gamma * (self.QTable[s_prime, np.argmax(self.QTable[s_prime])])) self.experiences.append((self.s, self.action, s_prime, r)) self.num_experiences = self.num_experiences + 1 # Dyna-Q Planning - Start if self.dyna_planning_steps > 0: # Number of simulations to perform idx_array = np.random.randint(0, self.num_experiences, self.dyna) for exp in range(0, self.dyna): # Pick random experiences and update QTable idx = idx_array[exp] self.QTable[self.experiences[idx][0],self.experiences[idx][1]] = (1-self.alpha)*self.QTable[self.experiences[idx][0], self.experiences[idx][1]] + \ self.alpha * (self.experiences[idx][3] + self.gamma * (self.QTable[self.experiences[idx][2], np.argmax(self.QTable[self.experiences[idx][2],:])])) # Dyna-Q Planning - End if rand.random() >= self.random_action_rate: action = np.argmax(self.QTable[s_prime,:]) #Exploit: Select Action that leads to a State with the Best Reward else: action = rand.randint(0,self.num_actions - 1) #Explore: Randomly select an Action. # Use a decay rate to reduce the randomness (Exploration) as the Q-Table gets more evidence self.random_action_rate = self.random_action_rate * self.random_action_decay_rate self.s = s_prime self.action = action return action
Dyna Q 代表了一种进步,我们追求设计能够在复杂和不确定的环境中学习和适应的代理。通过理解和实施 Dyna Q,人工智能和机器学习领域的专家和爱好者可以为各种实际问题设计出有弹性的解决方案。本教程的目的不是介绍概念和算法,而是在这个引人入胜的研究领域激发创造性应用和未来进展的创造力。
Atas ialah kandungan terperinci Lanjutkan Q-Learning dengan Dyna-Q untuk meningkatkan pembuatan keputusan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!