보안세상

강화학습 알고리즘 Dqn이란? 본문

내 생각

강화학습 알고리즘 Dqn이란?

똔민 2023. 7. 22. 17:04
반응형

인공지능(AI)기술과 관련해서 최근들어 자주 언급되는 용어 중 하나로 Deep Q-Network (DQN)이라는 단어가 있다. 딥러닝 기술 기반의 심층신경망 모델인 DQN은 기존의 신경망 구조와는 다르게 데이터간의 관계성을 학습한다는 점에서 주목받고 있다. 특히 이미지 인식 분야에서 뛰어난 성능을 보여주고 있으며, 향후 자율주행 자동차 등 다양한 분야에서도 활용될 것으로 기대되고 있다. 본 글에서는 이러한 DQN에 대해 알아보고자 한다.

간단한 DQN 알고리즘 파이썬 예제

import numpy as np
import tensorflow as tf
import gym

class DQNAgent:
    def __init__(self, state_size, action_size):
        self.state_size = state_size
        self.action_size = action_size
        self.memory = []
        self.gamma = 0.95  # 감가율
        self.epsilon = 1.0  # 탐험을 위한 초기 입실론 값
        self.epsilon_decay = 0.995  # 입실론 감소 비율
        self.epsilon_min = 0.01  # 입실론의 최소값
        self.learning_rate = 0.001
        self.model = self._build_model()

    def _build_model(self):
        model = tf.keras.models.Sequential()
        model.add(tf.keras.layers.Dense(24, input_dim=self.state_size, activation='relu'))
        model.add(tf.keras.layers.Dense(24, activation='relu'))
        model.add(tf.keras.layers.Dense(self.action_size, activation='linear'))
        model.compile(loss='mse', optimizer=tf.keras.optimizers.Adam(lr=self.learning_rate))
        return model

    def remember(self, state, action, reward, next_state, done):
        self.memory.append((state, action, reward, next_state, done))

    def act(self, state):
        if np.random.rand() <= self.epsilon:
            return np.random.choice(self.action_size)
        act_values = self.model.predict(state)
        return np.argmax(act_values[0])

    def replay(self, batch_size):
        minibatch = np.random.choice(len(self.memory), batch_size, replace=False)
        for state, action, reward, next_state, done in self.memory:
            target = reward
            if not done:
                target = reward + self.gamma * np.amax(self.model.predict(next_state)[0])
            target_f = self.model.predict(state)
            target_f[0][action] = target
            self.model.fit(state, target_f, epochs=1, verbose=0)
        if self.epsilon > self.epsilon_min:
            self.epsilon *= self.epsilon_decay

if __name__ == "__main__":
    env = gym.make('CartPole-v1')
    state_size = env.observation_space.shape[0]
    action_size = env.action_space.n

    agent = DQNAgent(state_size, action_size)

    batch_size = 32
    episodes = 1000

    for e in range(episodes):
        state = env.reset()
        state = np.reshape(state, [1, state_size])

        for time in range(500):  # 최대 500 타임스텝까지 수행
            action = agent.act(state)

            next_state, reward, done, _ = env.step(action)
            reward = reward if not done else -10  # 실패 시 패널티로 -10 보상 부여
            next_state = np.reshape(next_state, [1, state_size])

            agent.remember(state, action, reward, next_state, done)

            state = next_state

            if done:
                print(f"episode: {e}/{episodes}, score: {time}")
                break

            if len(agent.memory) > batch_size:
                agent.replay(batch_size)


딥러닝기반의 AI모델들이 각광받는 이유는 무엇인가요?
기존의 기계학습 방식으로는 해결하기 어려웠던 문제들을 딥러닝 알고리즘을 이용하면 쉽게 해결할 수 있다는 장점이 있어서입니다. 예를 들어 사람 얼굴 사진을 보고 성별을 구분하거나, 특정 물체나 상황을 보고 어떤 물건인지 알아내는 일처럼 말이죠. 또한 여러가지 복잡한 정보를 동시에 처리해야 하는 경우에도 딥러닝 기법을 적용하면 좋은 결과를 얻을 수 있습니다.

반응형


DQN이라는 용어 들어보셨나요?
DQN은 Deep Q-Network의 약자로 딥러닝 네트워크 중 하나로 분류되는 알고리즘입니다. 기존 CNN과는 달리 입력 이미지 전체를 한 번에 학습하며 높은 성능을 자랑하지만 그만큼 구현하기 어렵다는 단점이 존재합니다. 그래서 현재까지는 주로 자율주행차 또는 의료영상분석등 특정분야에서만 사용되어왔습니다. 하지만 이러한 한계점을 극복하고자 여러 연구자들이 노력했고, 마침내 올해 초 구글 브레인팀에서는 세계 최초로 DQN모델을 이용해서 얼굴인식 시스템을 구축하는데 성공했습니다.

얼굴인식시스템이라니 어떤건가요?
구글 브레인팀에서 만든 얼굴인식시스템은 사람의 얼굴 사진을 보고 나이 추정 뿐만 아니라 성별 구분까지도 가능하게 해주는 시스템입니다. 예를들어 남자인지 여자인지 구별하거나 몇살인지 추측가능하다는 뜻이죠. 심지어 인식률 또한 90%이상으로 매우 높아 실제 범죄수사나 보안쪽에서 유용하게 쓰일것으로 기대됩니다.

딥러닝 모델인 DQN 어떻게 동작하나요?
기존 머신러닝 방식으로는 불가능했던 정확한 연령추정이 가능해진 이유는 바로 DQN 덕분입니다. 먼저 컴퓨터에게 주어진 데이터셋으로부터 특징들을 추출해야 합니다. 이때 대표적인 방법중 하나가 Convolutional Neural Network (CNN) 입니다. 이렇게 얻은 특징 벡터로부터 새로운 차원의 공간을 생성하면 그것이 바로 DQN 인거죠. 즉, 다시말해 이전 단계에서 얻어진 정보를 다음 단계에서 재사용함으로써 효율성을 극대화시킨다고 이해하시면 됩니다.

최근 왜 이렇게 딥러닝관련 뉴스가 많이 나오는건가요?
요즘 빅데이터 분석 및 머신러닝/딥러닝 개발 열풍이 불고 있고, 이에 대한 수요가 증가하면서 자연스럽게 해당분야 전문인력에 대한 관심도 높아지고 있습니다. 하지만 아직 국내 기업체에서의 인력수요는 많지 않은 편이고, 대부분 해외기업과의 협력을 통해 프로젝트를 진행하는 경우가 많습니다. 따라서 취업준비생 입장에서는 외국어능력 향상뿐만 아니라 실무경험을 쌓을 수 있는 기회를 잡는 것이 매우 중요합니다.

머신러닝/딥러닝개발자가 되기 위해서는 어떻게 해야하나요?
우선 컴퓨터공학 또는 통계학 전공자는 유리하지만 반드시 그런 것은 아닙니다. 비전공자라도 프로그래밍 언어 기초지식 습득 후 수학공부를 열심히 한다면 충분히 도전가능합니다. 다만 대학원 진학시 연구실 선택 시 주의사항이 몇 가지 있습니다. 첫째, 교수님께서 직접 참여하시는 프로젝트가 많은 곳이어야 합니다. 둘째, 석사과정 동안 논문작성 경험을 해볼 수 있는 곳이어야 합니다. 셋째, 졸업 후 진로선택 방향성이 뚜렷한 곳이어야 합니다. 넷째, 산학협력프로젝트 수행기회가 많은 곳이어야 합니다. 다섯째, 영어논문 독해실력향상을 위한 교육프로그램이 운영되는 곳이어야 합니다.

4차 산업혁명시대 유망직업군 1위라는 타이틀답게 앞으로의 발전가능성이 무궁무진한 분야라고 생각됩니다. 현재 우리나라 뿐만 아니라 세계 각국에서 정부차원의 투자지원이 이루어지고 있으므로 관심있는 분이라면 지금부터라도 차근차근 준비한다면 누구나 꿈을 이룰 수 있다고 생각합니다.

반응형
Comments