Software Development

How AI Is Changing Our Work

데이블에서는 매달 회사 구성원들이 모두 모인 자리에서 경영진들이 돌아가서 성과와 방향성을 설명하는 Monthly Sharing을 진행합니다. 저는 CTO로서 Engineering 관점에서 특히 중요하다고 생각하는 성과와 계획을 공유하고, 이를 가능하게 한 구성원들을 치하하기도 합니다. 하지만, 무엇보다도 제가 공을 들이는 부분은, 우리가 이미 충분히 고민하거나 실행하고 있는 일들이 아닌, 우리가 앞으로 고민해야하는 일에 대한 저의 생각을 정리해서 공유하는 Ideas 파트입니다.

모두가 경험하고 기억하듯, 2025년 하반기는, AI가 소프트웨어 엔지니어의 일하는 방식에 커다란 충격을 던져준 시기였습니다. 저를 포함해 많은 분들은 이러한 변화에 빠르게 적응하고 다음 단계로 올라서기 위해 노력했지만, 동시에 경험많은 시니어 엔지니어들조차도 불안감을 표현하고 있던 시기였습니다. 제가 주로 접하는 Reddit이나 Twitter 등에서도, 충격과 불안함, 허탈함의 표현들도 많았지만, 의외로 이러한 변화의 본질이 무엇이고, 우리들의 역할은 이런 것일거라는 생각들도 많이 논의가 되었고, 저는 어느 정도 일관된 컨센서스가 있다는 생각을 했습니다. 물론, 이러한 생각들은 앞으로 있을 변화의 속도나 전환을 생각하면 모두 무너질 수 있는 것들이지만, 아무리 한치 앞을 볼 수 없는 시기라고 하더라도, 그렇다고 해서 아무것도 하지 않는 것보다는, 우리 안의 지도를 계속 그려나가며, 길을 찾는 노력을 지속하는 것은 중요하다고 생각했습니다.

마침 2026년 1월에 저의 Monthly Sharing 발표 순서가 돌아오게 되었고, 소프트웨어 엔지니어 또는 소위, 지식노동자들이 앞으로 어떻게 변화해야하는가에 대한 얘기를 해보고 싶었습니다. 동료들의 불안함을 덜어주려는 목적도 없지는 않았지만, 그보다는 우리가 변화하지 않으면 안된다는 생각이 더 컸습니다. 요즈음 발표 자료를 만들 때 다들 그러하듯이, 먼저 저의 생각을 텍스트로 정리하고, AI의 도움을 통해 1차적으로 프리젠테이션에 알맞는 간결한 텍스트로 정련한 다음, 역시 AI의 도움을 얻어 디자인을 입히는 식으로 발표 자료를 준비했습니다. 다만, 발표에는 20분 가량의 짧은 시간이 주어지기에, 제 생각을 모두 전달하지 못했을 수도 있다는 생각을 했습니다. 그래서, 이를 조금 더 자세히 설명해보고 싶었고, 지금에서야 글을 쓰게 되었네요.

다시 한번 강조하고 싶은 것은, 제가 이 글에서 다루는 내용들은 저만의 생각이 아니라, 꽤나 많은 사람들이 동의할 수 있는 생각들이고, 훨씬 도전적인 생각들은 의도적으로 제외했습니다. 즉, 이 생각들이, 다가올 미래에 대해 상상의 나래를 펼친 것이 아니라, 이미 다가온 현재를 다루고 있다는 점을 다시 한번 말씀드리고 싶습니다.

Shift 1: From “How to Build” to “What to Achieve”

소프트웨어 엔지니어로서의 일 중에서, ‘How’의 문제, 즉, 문제를 어떻게 해결하는가의 영역의 많은 영역을 AI가 처리할 수 있게 되었습니다. 물론, ‘How’를 완전히 AI에게 맡길 수 있다고 장담할 수 있는 상황은 아직 아닙니다만, ‘How’의 영역의 커다란 부분을 AI가 다룰 수 있게 되었다는 것은 소프트웨어 엔지니어라면 누구나 동의할 수 있을 것입니다.

인간은 ‘What’과 ‘Why’를 여전히 맡고 있습니다. AI가 ‘What’과 ‘Why’도 할 수 있지 않느냐고 묻는다면, 그러한 흉내를 낼 수 있지만, 결국 현재까지의 세상은 인간이 원하는 것을 이루기 위해 움직여왔고, 적어도 앞으로 10-20년 정도는 그러한 본질이 변하지는 않으리라고 생각합니다. 언젠가 AI가 인간의 선과 욕망을 결정하는 세상이 올 수도 있겠지만, 그러한 세상이 올 때까지 인간과 AI가 경쟁하고 다투는 과정에는 많은 시간이 걸릴 것이라고 생각합니다. 그러한 과도기의 도입부에 해당하는 현 시점에서, 아직은 소프트웨어 엔지니어는 인간으로서, 우리가 원하는 것이 무엇이고, 그래서 어떤 문제를 풀어야하는지를 다루어야만 합니다.

구체적으로, 소프트웨어 엔지니어는, 우리의 의도 – 무엇을 만들고 싶은지 – 를 명확하게 표현하는 일, 그리고 그러한 과정에서 어떠한 제약이 존재하고, 성공의 기준이 무엇인지를 들추어내고 정의하는 일, 실제로 최종적인 결과물이 그러한 기준과 제약, 의도에 들어맞는지를 검증하고 판단하는 일에 집중해야합니다.

한가지 짚고 넘어갈 부분이 있습니다. 여전히 소프트웨어 엔지니어는 ‘How’도 다룰 것입니다. 한편, LLM이 태어나지 않은 세상에서도 그동안 사양서나 테스트 계획을 작성하는 일을 해오지 않은 것도 아닙니다. 커다란 변화는, AI와의 분담을 통해, 소프트웨어 엔지니어가 집중해야하는 영역이 ‘How’에서 ‘What’과 ‘Why’로 크게 기울어진다는 것입니다.

Shift 2: Blurring Boundaries Between Engineering Roles

이러한 변화의 결과로, 엔지니어링 역할들 사이의 경계가 희미해질 수 밖에 없습니다. ‘How’에 대한 주도권을 AI에게 넘긴다는 것은, 소프트웨어 엔지니어가 분화된 역할에서 가지고 있던 ‘How’에 대한 지식과 경험들의 의미와 가치가 줄어든다는 것을 의미합니다.

‘What’과 ‘Why’가 중요해지기에, 일의 시작과 끝, 즉, 어떤 것을 왜 만들어야하고, 그것이 만들어야 했던 이유가 충족되었는지 판단하는 일이 중요해집니다. 현재까지는 이러한 것들을 잘하는 엔지니어도 있지만, ‘How’만 잘하는 엔지니어도 있고, 또 중요했습니다. 앞으로는, 올바른 일을 시작하고, 올바르게 일을 끝맺을 수 있는 end-to-end problem solver들의 가치가 높아질 것입니다.

소프트웨어 엔지니어의 가치를 따질 때, 지금까지는 문제와 관련된 영역에 특정한 전문성을 가지고 있느냐를 빼놓을 수 없었습니다. 앞으로는 그러한 장면은 점점 줄어들 것이라 생각합니다. 이제는 어떤 소프트웨어 엔지니어가 과연 문제 해결을 시작부터 끝까지 풀어낼 수 있는가, 그 과정에서 필요한 여러 행동 요소들 – 도메인 지식과 경험, 커뮤니케이션, 협력 행동, 책임감 – 을 포함하는 Ownership을 가지고 있는가가 훨씬 더 중요한 요소가 될 것입니다.

Shift 3: Declining Cost Differences Between Technologies

‘How’에 대한 주도권을 AI에게 넘기는 것은 우리가 지금까지 가지고 있었던 기술이나 기술 작업에 대한 비용 이해를 완전히 바꿔놓게 됩니다.

지금까지는 어떤 프로그래밍 언어나 프레임워크를 도입할 때, 그것들을 이해하고 실수가 줄어들 때까지 훈련하는 비용을 항상 중요하게 다룰 수 밖에 없었습니다. 물론, 여전히 기술 선택은 비용에 영향을 미칠 것입니다. 하지만, 우리가 지금까지 경험하거나 생각했던 것보다 차이가 크게 줄어들 것입니다.

현재의 변화가, 기술 도입의 결론들까지도 뒤흔들어 놓을 것이라는 결론에 너무나도 쉽게 도달하게 됩니다. 우리가 그동안 경험으로 또는 간접적으로 몸에 익혔던 기술 비용의 감각은 틀린 것이 될 수 있습니다. 때분에, 기술 비용에 대한 판단을 할 때, 지금까지 우리가 알고 있었던 것을 버리거나, 매우 주의해서 다루어야 할 필요가 있습니다. 진정으로 ‘Unlearning’이 중요해지는 이유이기도 합니다.

기술 결정을 수행할 때, 그 기술이 현재 비즈니스나 시스템의 요구에 알맞는가에 더해서 우리 팀이나 조직이 그 기술을 숙련되게 다룰 수 있는가를 그동안 함께 고려해왔지만, 후자의 중요도가 떨어졌기 때문에, 우리는 좀 더 비즈니스나 시스템에 의거한 결정을 할 수 있는 자유가 늘어난다는 점은, 기술의 본질적인 가치를 높이는 좋은 변화라고도 볼 수 있을 것 같습니다.

이러한 기술 결정을 하는 소프트웨어 엔지니어들에게 요구되는 역량에도 영향을 미치게됩니다. 현재까지는 기술의 학습 능력이나 태도, 취향이 무시 못할 중요한 요소였지만, 앞으로는, 기술 결정을 현재 및 미래의 비즈니스나 시스템의 변화를 고려해서, 전략적으로 수행하는 역량이 훨씬 더 중요해지게 됩니다.

So What?

소프트웨어 엔지니어들은 뭘 해야하는건데? 라는 질문으로 시작한 글이기 때문에, 이에 대한 답을 할 시점이 된 것 같습니다. 사실 이미 위에서 그러한 답들은 모두 이루어졌지만, 소프트웨어 엔지니어로서 앞으로 중요하게 다루어야 할 역량들은 다음과 같다고 생각합니다.

  • 소프트웨어를 통해 해결해야하는 문제를 명확하고 정확하게 정의하는 스킬이 필요합니다.
  • 해결하려는 문제가 정말로 해결되었는지를 매우 효율적이고, 또한 정확하게 검증할 수 있어야 하고, 그러한 체계를 만들 수 있어야 합니다.
  • 문제 전체를 혼자서 다룰 수 있는 역량과 태도를 갖추어야 하고, 문제와 관련한 비즈니스 도메인에 대한 이해도가 경쟁력이 될 것입니다.
  • 복잡한 요소가 있는 문제를 체계적으로 분석할 수 있어야 하고, 미래의 문제를 예측하고 이에 따라 바람직한 설계를 할 수 있어야 합니다.

이러한 역량들은 원래부터 소프트웨어 엔지니어가 가져야 할 역량들이었지만, 변화의 흐름에서 이러한 역량들의 중요도가 훨씬 높아졌습니다.

문제는 이러한 역량들은 몇번의 연습을 하거나 문서를 읽는다고 해서 얻어지는 것이 아니라는 점입니다. 많은 고민과 다양한 상황에서의 훈련을 통해서만 얻어지는 역량들입니다.

그래서, 당장 오늘부터 다음과 같은 훈련을 의식적으로 시작하시는 것을 제안합니다.

  • 자신이나 자신의 팀의 의도나 문제를 명확하게 문서로 표현합니다.
  • 어떻게 하면 소프트웨어를 정확하면서도 완전히 자동으로 테스트할 수 있을지 고민하고 시도를 시작합니다.
  • 결과물의 품질에 대한 ownership을 적극적으로 가져갑니다.
  • 오늘 내가 다루고 있는 기술과 작업, 도구들의 비용에 대해 다시 생각해봅니다.

Closing

AI 기술들의 발전과 이러한 변화들에 대한 인식이 퍼지는 데는 어느 정도 갭이 있습니다. 빠르게 행동하는 분들은 즉각적으로 발전이나 논의들을 수용하지만, 어느 정도 널리 퍼지는 데에는, 제 개인적인 느낌으로는 3-6개월의 시간이 걸리는 것 같습니다. 제가 이 발표를 했던 것이 2026년 1월 9일이었고, 약 3개월 남짓이 지난 현재 시점에서 볼 때, 이 글에서 다룬 생각들은 많이 퍼져있는 편이라고 생각합니다. 그래서 어떤 분들은 너무 반복되어서 지겨운 내용이라고 생각하는 분들도 계실거라고 생각합니다.

그럼에도 불구하고, 저는 이러한 생각들을 반영하는 실질적인 변화들은 아직 보편적이라고 말할 수 있는 단계는 아니라고 생각하고 있습니다. 아마도 생각을 행동으로 옮기는 데에는 시간이 걸리고, 또한 이것들은 조직적인 문제와도 결부되어 있기 때문에, 더 많은 시간이 걸릴 수 있다고 생각합니다.

그래서, 널리 퍼져있거나 이미 지루한 생각일지 몰라도, 생각을 명시적으로 글로 표현하고, 또 한국어로도 다루어보고 싶었습니다.

마지막으로, 많은 경험을 가지고 있고 또 다른 소프트웨어 엔지니어들을 이끌고 도와주는 역할을 하고 계시는 시니어 소프트웨어 엔지니어 분들께는 특별히 당부드리고 싶은 것이 있습니다. 우리들 중 많은 분들은, 수많은 AI 뉴스들을 보고 이것들을 따라가기에 급급합니다만, 단순히 변화에 적응하는 것이 아니라, 변화의 본질이 무엇인지 좀 더 고민해주시고, 그러한 고민의 결과들이 우리의 엔지니어링 프로세스와 조직들에 반영되려면 어떤 변화가 필요한지, 어떤 것을 먼저 시도해봐야 하는지 앞장서서 이끌어주시면 좋겠습니다. 어떤 미래가 올 것인지 걱정하며 따라가는 것에 바쁜 것보다는 우리가 적극적으로 미래를 고민하고 그 미래를 만들어가는 것이, 혹여 실패하더라도, 그 과정은 무척이나 재미있고 보람이 있을 것이라고 확신합니다.

How AI Is Changing Our Work 더 읽기"

Edward Sciore의 Database Design and Implementation 리뷰

Edward Sciore의 Database Design and Implementation을 읽었다. Database Design and Implementation 북 클럽 참여기에서 다루었던 책이고, 10월 초에 읽기 시작해서 출퇴근 길에 틈틈이 읽다 보니 약 3개월 만에 완독할 수 있었다. 바쁘거나 의욕이 떨어졌을 때에도 이메일 북클럽에서 Chapter별 오프닝 이메일이 와서 훌륭한 페이스메이커 역할을 해주었다.

이 책은 학부 수준의 텍스트로, 내용 면에서 어렵지 않았다. 초반에는 기본 개념을 다루다가, 후반부로 갈수록 앞에서 다룬 개념들이 결합되어 복잡한 구현이 가능해지는 부분이 특히 재미있었다.

책의 장점

이 책의 가장 큰 장점 중 하나는, 데이터베이스의 기본 개념과 구성 요소를 실제 코드로 설명한다는 점이다. 개념만 설명할 경우, 실제 구현 방식을 충분히 이해하지 못한 채 모호하게 넘어갈 수 있지만, 이 책은 코드를 통해 각 요소의 역할과 구현 방법을 구체적으로 이해할 수 있도록 도와준다. 흔히 텍스트에서 개념 설명과 코드의 제시가 따로 노는 경우가 많은데, 이 책은 개념 설명과 코드의 설명이 자연스럽게 연결되어있다. 또한, 코드의 설명도 매우 정성스럽게 이루어져 있어 코드의 이해도 쉬웠다.

다른 중요한 장점은, 데이터베이스의 요소에 대한 단순하고 직접적인 구현을 제시한 뒤, 이를 이용해 다음 장에서 한단계 위의 구성요소를 만들어 올리는 방식이다. 이를 통해 데이터베이스의 모듈화된 구조를 명확하게 보여준다. 추가적인 개념이 도입이 되면, 단순한 구현의 단점을 보완하는 개선된 구현을 제시해 점진적인 학습이 가능하도록 돕는다.

책의 단점

굳이 단점을 꼽자면, 각 Chapter 별로 현대 데이터베이스에서 흔히 사용되는 테크닉들과의 연결고리를 제시하는 Advanced Topic이 있었다면 더 보편적인 텍스트가 되었을 것이라는 아쉬움이 있다. 그러나, 이 책이 단순성과 이해 가능성을 우선시한 접근이었기 때문에 이는 큰 단점이라기보다는 방향성의 차이로 볼 수 있다.

인상 깊었던 부분

특히 재미있게 읽었던 Chapter들은, 데이터베이스의 핵심이라고 할 수 있는 Transaction과 Recovery, Concurrency를 다루는 Chapter 5, 데이터베이스의 빌딩 블럭들을 이용해서 쿼리의 실행과 플랜을 구현하는 Chapter 8과 Chapter 10, 인덱스와 Materialization, Sorting, Buffer 활용, 기초적인 Query 최적화를 다루는 Chapter 12 – 15들이었다. 이렇게 적고 보니 확실히 후반부를 더 흥미롭게 읽었던 것 같다.

읽고 난 후의 소감

2019 – 2020년 경에 데이터베이스 논문들을 읽으면서 현대적인 데이터베이스의 테크닉들을 재미있게 공부했었는데, 이번에 이 책을 읽으면서 기본적인 개념 및 구현과 현대적인 테크닉 사이의 갭을 바라볼 수 있는 시각을 얻게 되었다. 우연한 기회에 북클럽을 통해서 이 책을 읽게되었는데, 생각보다도 공부의 방향을 잡는데 큰 도움이 되었다.

단순히 코드를 읽는 것보다 직접 작성하는 것이 학습에 더 효과적이라고 생각하기 때문에, 시간이 나는대로 이 책의 Programming Exercise 중 중요한 문제들을 풀어볼 계획이다. 앞으로는 이 책에서 다루는 데이터베이스의 기본 개념들과 현대적인 데이터베이스의 테크닉들 사이의 갭에 해당하는 영역을 공부해보고자 한다.

Edward Sciore의 Database Design and Implementation 리뷰 더 읽기"

Database Design and Implementation 북 클럽 참여기

관심 가는 소프트웨어 북클럽이 종종 있다. 그런데 대부분 미국 중심이다 보니, 주기적으로 모이는 시간대가 보통 새벽이다. 그래서 참여하기가 힘들고, 참여를 못 하면 북클럽의 의미도 없어진다. 그런데 최근에 Software Internal 관련 이메일 북클럽이 있다는 소식을 듣고, 기대가 되어 바로 참여해보기로 했다. 책은 Edward Sciore의 Database Design and Implementation. 잘 모르는 책이지만, Software Internal 북클럽이니 믿고 일단 신청하고 주문부터 했다.

이메일 북클럽 운영 방식은, 참가자들이 Google Group에 가입해 매주 정해진 디스커션 리더가 새 챕터별로 쓰레드를 여는 형태였다. 특별히 큰 의무감이 따르지 않는 방식이었는데도, 매주 열리는 디스커션이 일종의 페이스메이커 역할을 해주었다.

요즘 공부 의욕이 높지 않아서 많은 시간을 들인 것은 아니고, 주로 퇴근길 버스에서 틈틈이 읽고 있다.

Chapter 1, 2, 3이 각각 Database Systems, JDBC, Disk and File Management 주제를 다루는데, 학부 수준의 내용이라 흥미가 생기지 않아 괜히 시작했나 싶기도 했다. Software Internal 북클럽인데 왜 하필 이 책을 고른 건지 의문이 들었다.

그러나 Chapter 3 마지막에 이 책의 가치를 조금 이해하게 되었다. 이 책은 Java로 만든 매우 단순한 데이터베이스 구현체인 SimpleDB를 함께 설명하면서, 각 장 마지막에 코드 레벨로 개념을 다룬다. Excercise에는 이 코드를 개선해보는 과제들도 있다.

어제 퇴근길에 Chapter 4 Buffer Management까지 읽었다. 데이터베이스의 핵심 구조이다 보니 집중해서 읽게 되었고, 코드까지 함께 다뤄볼 수 있어 흥미로웠다. 아침에 시간을 내어 오래된 SimpleDB 코드를 빌드하고 실행할 수 있게 만들었다.

처음 시도해보는 소프트웨어 북클럽이라 약간 망설임도 있었지만, 시간이 갈수록 생각보다 많은 것을 배우고 있다. 단순히 읽기만 하는 것과 달리, 직접 코드를 만져보며 책 속 개념들이 어떻게 구현되는지 더 깊이 이해하게 된다. 이제는 다른 언어로 포팅해보는 것도 하나의 도전으로 삼고, 앞으로도 꾸준히 참여해보려고 한다.

Database Design and Implementation 북 클럽 참여기 더 읽기"

LLM과 Autonomous Agent에 대한 단상

The image is captured from Andrew Ng’s talk: What’s next for AI agentic workflows.

최근에 지인들이 모인 디스코드에서 얘기했던 생각들을 퇴근길에 정리해봤다.

1. LLM에 컴퓨팅과 데이터를 때려넣으면 성능이 올라가는 것에 대해 한계효용 체감이 있을 것이라는 얘기는 계속 있어왔고, 그러한 경쟁조차도 치열한 접전이 되었다. 이번에 GPT-4o의 초점이 달라진 것을 보면 그러한 상황을 반영한 것이 아닌가 싶기도 하다. (이러고나서 GPT-5가 짜잔하고 나올 수도 있지만…)

2. Auto-Regressive LM의 본질 상 planning과 reasoning에 한계로 인해 현재의 기술만으로 singularity는 달성되지 않을 듯하다.

3. 치열한 경쟁으로 인해 LLM weights와 fine tuning 도구들은 commodity가 되었다.

4. 현재 ChatGPT 등은 스마트한 information retrieval 도구이고 엔터프라이즈에서 이러한 일을 대신 해주는 회사들도 많다.

5. 우리의 일을 최소한의 관여로 대신해주는 것에 관한 것은 아직 충분한 성과가 보이지 않는 것 같다.

이러한 상황으로 볼 때는 특정한 영역에 대해 autonomous agent를 구축하는 것에 대해 좀 더 많은 투자가 이루어져야 할 것 같다. 현재의 LLM capability와 실제 세상과 연결하기 위한 복잡다단한 엔지니어링, 요소마다 최적화하기 위한 모델들을 조합하고 제품 다듬기에 충분한 노력을 기울이면, 어떤 영역의 일반 작업들에서는 충분한 매력이 있는 제품을 얻을 수 있을 것 같다.

물론 이러한 생각을 하는 사람들(예를 들어 Andrew Ng의 agentic workflow)과 스타트업들(코딩을 완전 자동화했다는 주장..)은 이미 엄청나게 많을 것으로 예상된다.

이러한 소프트웨어를 빌드해서 실제로 돈을 벌 수 있을지에 대해서는 굉장히 의문스럽고, 아마도 실패할 수도 있고 매우 힘들겠지만, 그래도 빌드하는 과정은 인생을 한번 걸어보고 싶을 정도로 재미있을 것 같기는 하다.

LLM과 Autonomous Agent에 대한 단상 더 읽기"

CS234 Reinforcement Learning 15-16강

CS234의 마지막 강의인 15-16강을 들었습니다.

15강에서는 High-confidence Off-Policy Evaluation이라는 (아마도 교수님의 연구실에서 다뤘던 토픽인) 최근의 연구 결과를 다루고 있는데, 대략 새로운 policy의 expected return의 lower confidence bound를 계산함으로써 monotonic improvement를 일정 수준으로 보장하는 학습의 안전성을 얻기 위한 방법이라고 볼 수 있을 것 같습니다. 기초를 배우는 입장이라서 대충 이런게 있구나 하고 넘어갔습니다.

16강에서는 Monte-Carlo Search Tree에 대해 다루고 있습니다. 우리가 흔히 알고 있는 게임 트리와는 달리, 전체 스페이스를 탐색하는 것이 아니라, 일정 수의 시뮬레이션만을 수행하고, 일부 트리에 해당하는 이 데이터를 기반으로 결정을 내립니다. 또한, UCB1과 마찬가지로, upper confidence bound를 적용해 액션을 결정하여 exploration/exploitation을 수행합니다 (UCT). 결과적으로는 마치 UCB1이 적용된 MAB를 각 node마다 실행하는 느낌입니다. MCTS는 이 이름을 가지기 전부터 바둑에서의 강력함을 증명해오다가 DNN을 접목한 AlphaGo에까지 적용되었습니다. MCTS의 주요 페이퍼들과 AlphaGo에 관련한 페이퍼들을 읽어볼 생각입니다.

이로서 1월 중순 무렵에 시작했던 CS234 Reinforcement Learning 강의와 이에 관련한 Sutton & Barto 책을 통한 공부를 마쳤습니다. 주요 RL 알고리즘을 구현해보는 동시에, 공부를 시작할 때 사둔 Foundations of Deep Reinforcement Learning을 읽어볼 생각인데, 효과적인 학습을 위해 다른 토픽으로 1-2달 정도 넘어갔다가 진행해 볼 생각입니다.

CS234 Reinforcement Learning 15-16강 더 읽기"

CS234 Reinforcement Learning 11-13강

Exploration을 다루는 CS234 11-13강을 들었습니다.

우선 MDP에 비해 상대적으로 단순한 multi-armed bandits 문제와 regret과 같은 framework의 formulation으로 시작합니다.

이어서, 불확실한 상황에서 탐색을 통한 정보를 얻는 것의 가치를 높게 보는 Optimism in the face of Uncertainty 원리로부터 UCB1 알고리즘을 설명합니다. UCB 알고리즘들은 여러 경로로 접해왔지만, 이러한 원리 하에서 이해하게 된 것은 처음입니다. 또한, 각 arm들을 확률변수로 보고 Hoeffding’s Inequality를 통해 모르는 정보들을 제거하고 UCB1 알고리즘을 유도하는 과정도 꽤 흥미로웠습니다.

다음으로 reward distribution에 대해 Bayesian inference를 이용하는 Bayesian Bandits을 배우게 됩니다. Bayesian inference는 분석적으로 계산하기 까다로운데 conjugate prior를 통해서 이를 가능하게 하는 것도 처음으로 알게되었습니다. Bayesian bandits 하에서 Probability matching 접근을 하는 대표적인 알고리즘으로 Thomson Sampling이 다루어집니다. Thomson Sampling 알고리즘에서는 posterior로부터 sampling을 하고 이에 기반해 action을 결정하고, 이에 따른 reward를 다시 posterior에 반영하는 단순한 휴리스틱으로 되어있는데, 경험적으로 매우 잘 동작한다고 하네요.

마지막으로 PAC (Probably Approximately Correct) 개념과 이에 해당하는 알고리즘을 배웁니다. Supervised Learning에서와 비슷하게, 일정 이상의 확률로 optimal value로부터 일정 이하의 차이가 보장되는 것을 말합니다. 이러한 알고리즘의 예로 MBIE-EB를 들고 있고 어떤 RL 알고리즘이 PAC을 만족하기 위한 조건들도 다룹니다.

이번에는 강의도 쉽지 않았고 Bayesian Inference에 대해 정확하게 이해하기 위해 별도로 공부를 해야만 했습니다. exploration 방법들을 MDP에 적용하는 내용도 있었지만 이번에는 skip했습니다. 이번에 배운 내용들을 Bandit Algorithms 책과 인터넷에서 다시 한번 복습을 해보고 나머지 강의들을 들을 예정입니다.

CS234 Reinforcement Learning 11-13강 더 읽기"

CS234 Reinforcement Learning 9-10강

Policy Search를 다루는 CS234 Reinforcement Learning 9-10강을 들었습니다.

9강은 Sutton Chapter 13에서도 다루고 있는 REINFORCE with baseline에 관한 내용입니다. 10강에서는 이러한 Policy Gradient method에서 monotonic improvement를 보장하기 위해서 step size를 결정하는 문제를 다룹니다. 여기서 매우 유명한 TRPO (Trust Region Policy Optimization) 알고리즘에 이르는 과정을 배우게 됩니다. Policy gradient의 iteration에서 새로운 policy의 value를 알 수는 없지만, lower-bound를 계산할 수 있고, 이러한 lower-bound가 개선되는 것을 보장할 수 있는 objective function과 constraint를 제안합니다. 이를 통해서 policy value를 최대화하면서 안정적인 학습이 이루어질 수 있도록 step size를 결정하는 알고리즘이 TRPO 알고리즘입니다.

계산이 어려운 문제를 계산 가능한 문제로 전환하고 이로부터 실용적인 알고리즘을 제안하는 과정이 ‘아름답다’고 밖에는 말할 수 없는 흥미로운 토픽이었습니다.

CS234 Reinforcement Learning 9-10강 더 읽기"

Reinforcement Learning by Sutton & Barto Chapter 13

RL Introduction Chapter 13 Policy Gradient Methods를 읽었습니다.

Value function을 approximation해서 optimal policy를 찾아내는 접근과 달리, parametrized policy를 정의하고, parameter에 대한 policy performance의 gradient를 통해 optimal policy를 직접 찾아내는 방법입니다.

Policy Gradient Theorem에 기초해서 REINFORCE라는 알고리즘을 얻는 과정을 설명하고, variance를 줄이기 위해 baseline을 도입한 REINFORCE 알고리즘을 얻는 과정도 배울 수 있었습니다.

이어서 Actor-Critic method도 소개하는데 REINFORCE with baseline 알고리즘에서 baseline으로 state-value function을 사용해서 action의 결과를 평가하기 위한 기준 역할을 합니다. state-value function은 semi-gradient TD를 통해서 학습하고, REINFORCE 알고리즘에 자연스럽게 통합될 수 있습니다.

Policy Gradient Method들은 stochastic한 policy를 자연스럽게 학습할 수 있고, exploration을 얼마나 할지도 학습할 수 있는 장점이 있습니다. 또한, action space가 연속적일 때도 적용할 수 있습니다.

이 책에서 다루는 전통적인 RL 방법들에 대해서는 어느 정도 기초가 마련된 것 같고, 당장은 CS234 강의를 마저 듣고, 그 다음에는 Deep Reinforcement Learning 방법을 공부하기 위한 책으로 넘어가볼까 합니다.

Reinforcement Learning by Sutton & Barto Chapter 13 더 읽기"

CS234 Reinforcement Learning 7-8강

Reinforcement Learning 7, 8강을 들었습니다. 각각 Imitation Learning과 Policy Search의 도입부를 다루고 있습니다.

Imitation Learning은 전문가의 시연로부터 어떻게 모방할 수 있는가의 문제를, 전문가의 state, action 샘플로부터 reward function을 추정하거나 이로부터 optimal policy를 학습함으로써 풀고 있습니다.

그동안 value function을 학습해서 policy evaluation 및 control을 해왔던 value-based method를 다뤄왔습니다만, 8강에서는 policy 자체를 학습하는 접근을 다루기 시작합니다. policy 자체를 파라미터를 이용해 표현하고, policy의 value를 최대화하는 파라미터를 찾는 최적화 문제로 다룹니다. 최적화 방법에는 여러가지가 있지만, Likelihood Ratio / Score Function Policy Gradient에 temporal structure를 도입함으로써 결국 잘 알려진 REINFORCE 알고리즘을 얻게 되는 과정을 설명합니다.

다음 강의들을 듣는 동시에, Intro to Reinforce Learning의 Chapter 13도 함께 읽어볼 예정입니다.

CS234 Reinforcement Learning 7-8강 더 읽기"

Reinforcement Learning by Sutton & Barto Chapter 9

Chapter 9 On-policy Prediction with Approximation을 읽었습니다.

state space가 매우 크고 이에 따르는 데이터가 큰 문제에 대해 샘플로부터 value function을 approximation하는 문제로 넘어가게 됩니다. state를 대표하는 feature들로부터 value를 계산할 수 있는 function의 weight를 샘플들을 통해서 찾는 supervised learning 문제로 바라봅니다.

여기서부터는 SGD라든가 여러 basis function들을 기반으로 하는 linear method들, non-linear method로서의 neural network 등의 일반적인 방법들이지만 그동안의 RL 연구에서 자주 활용된 방법들을 소개하고 있는 것 같습니다. 이 과정에서 convergence 문제라든가 dimensionality reduction에 관련한 이슈도 다루고 있습니다. coarse coding이나 tile coding 등은 처음 들어본 것이라서 살짝 흥미로웠습니다. 현재는 deep learning이 트렌드가 되었기 때문에 긴장감이 좀 떨어지지만, 그래도 기존의 접근들을 기반으로 새로운 접근들을 쌓아올라가는 면들이 현재도 있는 것 같아서 도움이 될 수도 있겠다는 생각 정도는 들었습니다.

이어서 Atari 관련한 DeepMind 페이퍼들을 좀 읽어볼 예정입니다.

Reinforcement Learning by Sutton & Barto Chapter 9 더 읽기"