머신 러닝 및 신경망 - 페이지 65

 

인지 컴퓨팅 및 인공 지능 소개



인지 컴퓨팅 및 인공 지능 소개

저는 Dr. Soper입니다. 인지 컴퓨팅과 인공 지능(AI)에 관한 이 포괄적인 시리즈의 첫 번째 비디오에 여러분을 초대하게 되어 기쁩니다. 이 시리즈는 이러한 흥미로운 분야에 대해 더 많은 것을 배우고자 하는 개인에게 지식과 통찰력을 제공하는 것을 목표로 합니다. AI 또는 인지 컴퓨팅 시스템에 대한 사전 지식이 있는지 여부에 관계없이 이 시리즈는 기본 사항을 다루고 강력한 기반을 구축합니다.

우리 중 많은 사람들이 공상 과학 책이나 블록버스터 영화에서 인공 지능을 접했지만 이 비디오 시리즈는 소설이 아닌 현실에 초점을 맞출 것입니다. 우리의 여정은 인지 컴퓨팅과 인공 지능의 진정한 본질을 탐구할 것입니다. 우리는 그들의 정의, 오늘날 사용 가능한 다양한 유형의 시스템, 기능, 실제 응용 프로그램 및 우리 삶의 다양한 측면에 미칠 변형 효과를 탐구할 것입니다.

이 시리즈의 흥미로운 측면 중 하나는 우리가 논의하는 AI 및 인지 시스템을 구축하기 위해 Python 및 Jupyter 노트북을 활용하는 방법도 배울 것이라는 점입니다. 실제 구현에 참여하면서 이 실습 경험은 의심할 여지 없이 시리즈의 가장 즐거운 부분 중 하나가 될 것입니다.

자, 우리의 교육 모험을 시작합시다!

이 초기 수업은 인공 지능 및 인지 컴퓨팅에 대한 소개 역할을 하므로 이러한 용어를 정의하는 것이 중요합니다. 인공 지능은 간단히 말해서 기계가 보여주는 지능을 말합니다. 환경을 인식하고 행동을 취하거나 목표를 달성하기 위한 결정을 내리는 인공 장치를 포함합니다. 인공 지능 시스템을 차별화하는 것은 명시적인 지시 없이 독립적으로 학습할 수 있는 능력입니다. 대신 그들은 문제를 해결하거나 작업을 수행하는 가장 효과적인 접근 방식을 자율적으로 결정할 수 있습니다.

반면 인지 컴퓨팅은 전통적으로 인간의 인지에만 국한된 작업을 수행하거나 서비스를 제공하는 AI 시스템을 말합니다. 모든 인지 컴퓨팅 시스템은 인공 지능으로 간주되지만 모든 AI 시스템이 인지 기능을 가지고 있는 것은 아닙니다. 인지 컴퓨팅에는 이상 감지, 감정 분석, 언어 번역, 자연어 처리, 음성 인식 및 합성, 이미지 및 비디오 인식 등과 같은 광범위한 애플리케이션이 포함됩니다.

이 시리즈 전반에 걸쳐 다양한 인지 컴퓨팅 시스템의 기반 역할을 하는 네 가지 유형의 인공 지능 모델을 탐색하고 구현할 것입니다.

먼저 시스템이 탐색-이용 딜레마를 해결하는 데 도움이 되는 비교적 간단한 AI 모델인 Thompson Sampling을 자세히 살펴보겠습니다. 이러한 시스템은 예상 보상을 최대화하는 작업을 선택하는 방법을 자율적으로 학습할 수 있습니다.

다음으로 강화 학습의 범주에 속하는 Q-러닝에 대해 자세히 살펴보겠습니다. Q-러닝은 상태 및 가능한 조치로 특징지어지는 환경에서 작동하는 에이전트를 포함합니다. 이러한 시스템은 주어진 상태에서 의사 결정을 안내하는 최적의 정책을 자동으로 식별할 수 있습니다.

우리가 다룰 세 번째 모델은 인공 신경망을 중심으로 하는 딥 러닝입니다. 인간의 두뇌와 유사한 이러한 네트워크는 상호 연결된 노드 또는 뉴런으로 구성됩니다. 심층 신경망은 음성 인식, 기계 번역, 의료 진단 등과 관련된 시스템을 포함하여 수많은 흥미로운 AI 및 인지 시스템의 기반 역할을 합니다. 그들은 심지어 비디오 게임을 하고, 예술 작품을 만들고, 음악을 작곡하는 것과 같은 작업에서 능력을 입증했습니다.

마지막으로 심층 합성곱 신경망을 살펴보겠습니다. 이러한 네트워크는 컨볼루션이라고 하는 특수한 수학적 연산을 사용하여 이미지 및 비디오의 시각적 정보를 처리하는 데 탁월합니다.

이제 AI와 인지 컴퓨팅은 어떻게 세상을 혁신할 것인가? 가능성은 거의 무한합니다! 2030년까지 이러한 기술은 세계 경제에 약 16조 달러를 기여할 것으로 예상됩니다. 기업, 정부 및 개인을 위한 잠재적인 혜택은 풍부합니다.

에너지 부문에서 AI와 인지 컴퓨팅은 에너지 소비와 분배를 최적화하여 전 세계 에너지 사용량을 효과적으로 줄일 것입니다. 의료 분야에서 이러한 기술은 신약 및 백신 설계, 질병 진단 및 맞춤형 의료 제공에 도움이 될 것입니다. 운송 및 물류 분야에서 AI로 구동되는 자율 주행 차량은 사고와 교통 혼잡을 크게 줄이는 동시에 전자 상거래 배송을 혁신할 것입니다. 교육은 AI 및 인지 컴퓨팅으로 촉진되는 개인화되고 최적화된 교육 경험의 이점을 누릴 수 있습니다. 범죄를 줄이고 공공 안전을 강화하며 사기 및 신원 도용을 방지하는 AI의 능력을 통해 안전과 보안이 강화될 것입니다. 고용 부문은 AI를 활용하여 후보자와 직위 간 최적의 일치를 식별하여 직무 만족도를 높일 것입니다. 스마트 홈과 가정용 로봇은 작업을 자동화하고 장치를 모니터링하며 상주 로봇 도우미를 제공하여 노인과 장애인의 독립적인 생활을 촉진합니다. AI와 인지 컴퓨팅은 또한 경험을 추천하고 사람들이 새로운 친구와 사교계를 찾도록 도와줌으로써 엔터테인먼트와 사회화에 혁명을 일으킬 것입니다. 환경 이니셔티브는 AI를 통해 개선된 폐기물 처리, 재활용 및 오염 감소의 이점을 누릴 수 있습니다. 비즈니스에서 AI는 프로세스를 자동화하고, 수익을 최적화하고, 혁신을 촉진하고, 의사 결정을 향상시킵니다.

AI와 인지 컴퓨팅이 무수히 많은 혁신적인 응용 프로그램을 계속해서 공개할 것이기 때문에 이러한 예는 단지 표면을 긁는 것일 뿐입니다. 그들은 의사 결정을 강화하고, 인간 지능을 강화하고, 다른 작업을 위한 인지 자원을 확보할 수 있는 잠재력을 가지고 있습니다. 가까운 미래에 인지 기계와 AI는 우리 삶에 완벽하게 통합되어 스마트폰, 인터넷 또는 전기처럼 없어서는 안 될 존재가 될 것입니다. 우리는 그들 없이 어떻게 관리했는지 궁금할 것입니다.

다음 강의에서는 이전에 논의한 AI 모델을 구축하고 구현하기 위해 이 시리즈 전체에서 Python과 함께 사용할 강력한 도구인 Jupyter Notebooks를 살펴보겠습니다. Jupyter Notebooks 또는 Python에 익숙하지 않더라도 여정이 진행됨에 따라 이러한 도구에 대해 상당한 경험을 얻게 될 것이므로 안심하십시오.

인지 컴퓨팅 및 인공 지능에 대한 이 입문 강의가 유익하고 흥미로웠기를 바랍니다. 다음 시간까지 좋은 하루 되세요!

 

AI 툴킷 - Jupyter 노트북 작업



AI 툴킷 - Jupyter 노트북 작업

저는 Dr. Soper입니다. 오늘 저는 여러분에게 인공 지능 툴킷을 소개하게 되어 기쁩니다. 우리의 주요 초점은 Jupyter 노트북이라는 매우 유용하고 사용자 친화적인 기술에 있습니다.

그러나 구체적인 내용을 살펴보기 전에 잠시 시간을 내어 이 강의에서 배울 수 있는 내용을 살펴보겠습니다.

이 비디오가 끝나면 다음에 대해 명확하게 이해하게 될 것입니다.

  1. AI 툴킷 보유의 중요성.
  2. Jupyter 노트북의 정의 및 목적.
  3. AI 및 인지 컴퓨팅 프로젝트에 Jupyter 노트북을 사용할 때의 이점.
  4. Google Cloud 및 Microsoft Cloud에서 Jupyter 노트북을 무료로 만드는 방법
  5. Jupyter 노트북을 효과적으로 활용하여 AI 및 인지 컴퓨팅 프로젝트를 개발하고 실행하는 방법.

이 강의 전반에 걸쳐 우리는 인공 신경망을 구축, 훈련 및 테스트하기 위한 실습 여행을 시작합니다. 프로세스가 얼마나 간단한지 즐겁게 놀랄 것입니다!

일을 시작하기 위해 AI 툴킷이 필수적인 이유에 대해 논의해 봅시다.

인지 컴퓨팅 및 인공 지능에 관한 이 비디오 시리즈는 이론과 개념을 뛰어넘습니다. 다양한 유형의 AI 모델을 구축하는 방법을 배우게 됩니다!

인공 지능 또는 인지 컴퓨팅 모델을 구성하려면 일련의 도구가 필요합니다. 이러한 도구에는 CPU, 메모리 및 파일 저장소와 같은 계산 리소스가 포함됩니다. AI 프로젝트를 진행할 수 있는 개발 환경도 필요합니다. 마지막으로 원하는 작업을 컴퓨터에 전달하려면 일련의 지침이 필요합니다.

도구 측면에서 우리는 다음 비디오부터 시작하여 이 시리즈 전체에서 Python 프로그래밍 언어를 배울 것입니다.

컴퓨팅 리소스 및 개발 환경과 관련하여 클라우드에서 호스팅되는 Jupyter 노트북은 AI 및 인지 컴퓨팅 프로젝트를 모두 제공할 수 있습니다.

이제 Jupyter 노트북이 무엇인지 살펴보겠습니다.

Jupyter 노트북은 정렬된 셀 모음으로 구성된 대화형 웹 기반 환경입니다. Jupyter Notebook 내의 각 셀에는 텍스트, 프로그래밍 코드, 수학 공식, 이미지 또는 기타 미디어 요소가 포함될 수 있습니다.

이러한 다재다능함 덕분에 AI 및 인지 컴퓨팅 모델의 모든 메모, 코드, 다이어그램, 시각화 및 출력을 한 곳에 보관할 수 있습니다.

Jupyter 노트북은 커널을 활용하여 프로그래밍 코드를 실행하고 프로젝트의 현재 상태를 유지합니다. Jupyter Notebook의 가장 인상적인 기능 중 하나는 한 번에 하나의 셀을 실행할 수 있는 기능입니다. 노트북 서버는 메모리에서 프로젝트의 현재 상태를 자동으로 추적합니다.

이 기능을 사용하면 하나의 셀에 코드를 작성하고 실행하고 결과를 관찰할 수 있습니다. 그런 다음 후속 셀에 추가 코드를 작성하여 이전 셀의 결과에 액세스하고 활용할 수 있습니다. 이 점진적 접근 방식을 사용하면 변경할 때마다 모든 것을 다시 실행할 필요 없이 점진적으로 프로젝트를 빌드하고 구체화할 수 있습니다.

Jupyter Notebook의 또 다른 주목할만한 측면은 Julia, Python 및 R과 같은 여러 프로그래밍 언어에 대한 지원입니다. "Jupyter"라는 이름은 실제로 이 세 언어의 조합에서 유래되었습니다.

이제 Jupyter 노트북이 다른 개발 플랫폼보다 선호되는 이유가 궁금할 것입니다.

대체 접근 방식을 사용할 수 있지만 Jupyter 노트북은 AI 및 인지 컴퓨팅 프로젝트에 많은 이점을 제공합니다.

  1. Jupyter 노트북은 웹 브라우저에서 직접 실행되므로 특수 소프트웨어를 설치하거나 구성할 필요가 없습니다. 인터넷에 연결되어 있으면 위치에 관계없이 모든 장치와 운영 체제에서 프로젝트 작업을 할 수 있습니다.
  2. Jupyter 노트북은 완전 무료입니다! Google 및 Microsoft와 같은 주요 기술 회사는 비용 없이 클라우드 플랫폼에서 Jupyter Notebook을 관대하게 제공합니다. 이를 통해 값비싼 소프트웨어에 투자하지 않고도 최첨단 AI 및 머신 러닝 모델에서 작업할 수 있습니다.
  3. Jupyter 노트북은 사용자 친화적이고 배우기 쉽습니다. 인터페이스는 간단하고 직관적이어서 복잡한 개발 환경을 설정하는 데 드는 시간과 노력을 줄여줍니다. 바로 코드 작성과 AI 모델 실험에 집중할 수 있습니다.
  4. Jupyter 노트북은 협업과 지식 공유를 촉진합니다. 동료, 협력자 또는 광범위한 AI 커뮤니티와 노트북을 쉽게 공유할 수 있습니다. 이는 공동 개발을 촉진하고 아이디어와 모범 사례의 교환을 장려합니다.
  5. Jupyter 노트북은 리치 미디어 통합을 지원합니다. 코드와 함께 이미지, 비디오, 대화형 시각화 및 설명 텍스트를 포함할 수 있습니다. 이를 통해 AI 모델을 더 쉽게 전달하고 문서화할 수 있으므로 작업의 전반적인 이해와 재현성이 향상됩니다.
  6. Jupyter 노트북은 대화형 데이터 탐색 및 시각화를 지원합니다. Matplotlib 및 Seaborn과 같은 기본 제공 라이브러리를 사용하여 노트북에서 직접 통찰력 있는 시각화를 생성할 수 있습니다. 이를 통해 모델 개발 프로세스 중에 데이터를 더 깊이 이해하고 정보에 입각한 결정을 내릴 수 있습니다.
  7. Jupyter 노트북은 AI 및 기계 학습을 위한 Python 라이브러리의 방대한 생태계에 대한 액세스를 제공합니다. Python은 단순성과 광범위한 라이브러리 지원으로 인해 많은 AI 실무자가 선택하는 언어가 되었습니다. Jupyter 노트북을 사용하면 TensorFlow, PyTorch, scikit-learn 등과 같은 라이브러리를 쉽게 가져오고 활용할 수 있습니다.
  8. Jupyter 노트북은 뛰어난 문서화 기능을 제공합니다. 노트북 셀에 자세한 설명, 지침 및 주석을 포함할 수 있습니다. 이를 통해 사고 과정을 추적하고, 다른 사람과 통찰력을 공유하고, 나중에 작업을 다시 방문하고 수정하는 데 도움이 됩니다.

이제 Jupyter Notebook 사용의 이점을 이해했으므로 Google Cloud 및 Microsoft Cloud에서 무료로 Jupyter Notebook을 만드는 방법에 대해 논의해 보겠습니다.

Google Cloud와 Microsoft Cloud는 모두 클라우드 플랫폼의 일부로 Jupyter Notebook 서비스를 제공합니다. 이러한 서비스는 Jupyter 노트북을 만들고 실행할 수 있도록 미리 구성된 환경을 제공합니다.

Google Cloud에서는 Google 인프라에서 실행되는 무료 Jupyter Notebook 환경인 Google Colab(Colaboratory의 약자)을 사용할 수 있습니다. 가속화된 기계 학습 계산을 위해 GPU 및 TPU에 대한 액세스를 제공합니다.

Google Colab에서 Jupyter 노트북을 만들려면 Google Colab 웹사이트(colab.research.google.com)로 이동하여 Google 계정으로 로그인하고 새 노트북을 시작하면 됩니다. 빈 노트북을 만들거나 Google 드라이브 또는 GitHub에서 기존 노트북을 열도록 선택할 수 있습니다.

마찬가지로 Microsoft Cloud에서는 Microsoft에서 제공하는 무료 Jupyter Notebook 서비스인 Azure Notebooks를 사용할 수 있습니다. Azure Notebooks는 데이터 과학 및 기계 학습 프로젝트를 위한 협업 환경을 제공합니다.

Azure Notebooks에서 Jupyter Notebook을 만들려면 Microsoft 계정으로 Azure Notebooks 웹 사이트(notebooks.azure.com)에 로그인하면 됩니다. 여기에서 기본적으로 Jupyter 노트북을 포함하는 새 프로젝트를 만들 수 있습니다.

Google Colab과 Azure Notebooks는 모두 AI 모델을 실행하는 데 필요한 컴퓨팅 리소스와 함께 친숙한 Jupyter Notebook 인터페이스를 제공합니다. 추가 라이브러리를 설치하고, 데이터 세트를 업로드하고, 다른 사람과 원활하게 협업할 수 있습니다.

이 강의의 다음 부분에서는 실용적인 예를 살펴보고 Jupyter 노트북을 효과적으로 활용하여 AI 및 인지 컴퓨팅 프로젝트를 개발하고 실행하는 방법을 시연합니다.

계속 지켜봐주시고 AI와 Jupyter 노트북의 세계로의 여정을 계속해 봅시다!

 

파이썬 기초 - 파트 01


파이썬 기초 - 파트 01

저는 Soper 박사입니다. 오늘 저는 Python 프로그래밍 언어의 기초에 대한 포괄적인 세 가지 강의 중 첫 번째 강의를 제공하게 되어 기쁩니다. 몇 개의 비디오에서 Python 프로그래밍의 모든 세부 사항을 다루는 것은 불가능하지만, 이 세 강의가 끝나면 Python 프로그래밍 여정을 이해하고 시작하기에 충분한 지식을 얻게 될 것입니다.

이 레슨에서는 대화식 프로그래밍 및 데이터 탐색을 위한 강력한 도구인 Jupyter 노트북을 활용합니다. Jupyter Notebook에 익숙하지 않은 경우 Python 프로그래밍에 들어가기 전에 이 시리즈의 이전 비디오를 시청하여 이 환경에 익숙해지는 것이 좋습니다.

이 단원에서 배울 내용에 대한 개요를 제공하는 것으로 시작하겠습니다. 이 비디오가 끝나면 Python의 다음 측면에 대한 지식을 얻게 됩니다.

  1. 텍스트 표시: print() 함수를 사용하여 화면에 텍스트를 표시하는 방법을 배웁니다. Python의 텍스트는 프로그래밍 명령과 구별하기 위해 작은따옴표로 묶습니다.

  2. 변수: 변수는 컴퓨터 메모리에서 기호로 명명된 저장 위치입니다. 필요에 따라 변경할 수 있는 값을 보유합니다. 텍스트, 정수 또는 부동 소수점 여부에 관계없이 변수를 만들고 값을 할당하는 방법을 살펴보겠습니다.

  3. 산술 연산자: Python은 변수에 대한 수학 연산을 수행하기 위한 다양한 산술 연산자를 제공합니다. 덧셈, 뺄셈, 곱셈, 나눗셈, 지수 및 모듈로 연산을 다룰 것입니다.

  4. 비교 연산자: 비교 연산자를 사용하면 두 값을 비교하고 관계를 결정할 수 있습니다. "같음", "같지 않음", "보다 큼", "보다 작음", "크거나 같음", "작거나 같음"과 같은 연산자에 대해 알아봅니다.

강의 전반에 걸쳐 예제와 데모를 활용하여 이러한 Python 기술 및 기능에 대한 이해를 강화할 것입니다. Python에서 텍스트를 표시하는 방법에 대해 논의하는 것으로 시작하겠습니다. 한 줄의 텍스트를 보여주기 위해 print() 함수를 사용합니다. 표시하려는 텍스트는 작은따옴표 안에 있는 print() 함수의 인수로 전달됩니다. 또한 "\n" 기호를 사용하여 줄 바꿈을 포함할 수 있습니다. 파운드 기호(#)로 표시된 주석은 사람이 사용할 수 있으며 코드 섹션을 설명하는 데 도움이 됩니다. Python은 코드를 실행할 때 주석을 무시합니다.

이러한 기술을 시연하기 위해 Jupyter 노트북 내의 코드 셀을 고려해 보겠습니다. 코드 셀은 print() 함수를 사용하여 "Hello, my name is Dan!"이라는 텍스트를 표시합니다. 화면에. 또 다른 예는 단일 print() 함수 호출에서 여러 줄의 텍스트를 표시하기 위해 "\n"을 사용하는 것을 보여줍니다.

변수로 이동하면 컴퓨터 메모리의 저장 위치라는 이름이 지정됩니다. 변수는 모든 유형의 데이터를 보유할 수 있습니다. Python에서 새 변수를 만들려면 등호 왼쪽에 이름을 입력하고 오른쪽에 값을 입력하여 값을 할당합니다. 코드 셀에서 값이 '맛있는 나초'인 "product_name", 값이 33인 "quantity_sold", 값이 12.99인 "unit_price"와 같은 변수를 선언할 수 있습니다. 그런 다음 print() 함수와 연결을 사용하여 이러한 변수의 값을 인쇄할 수 있습니다.

또는 format() 함수를 사용하여 변수 값에 대한 자리 표시자와 동일한 결과를 얻을 수 있습니다. 이렇게 하면 원하는 출력 텍스트를 정의하고 중괄호 안에 변수 위치를 표시할 수 있으므로 프로세스가 간소화됩니다. 산술 연산자를 시연하기 위해 더하기는 "+", 빼기는 "-", 곱하기는 "*", 나누기는 "/", 지수는 "**", 모듈로 연산은 "%"와 같은 기호를 사용합니다. 이러한 연산자는 변수에 대해 수학적 계산을 수행합니다.

모두들 멋진 하루 보내시길 바랍니다. 제 이름은 Soper 박사입니다. 오늘 저는 Python 프로그래밍 언어의 기초에 대한 세 가지 강의 시리즈의 첫 번째 편을 발표하게 되어 기쁩니다. 이제 몇 개의 비디오에서 Python 프로그래밍의 모든 세부 사항을 다룰 수는 없다는 점에 유의하는 것이 중요합니다. 그러나 이 세 가지 단원을 완료할 때쯤에는 Python 프로젝트를 이해하고 작업을 시작할 수 있는 충분한 지식을 습득하게 됩니다.

이 레슨에서는 Jupyter Notebook을 사용하여 모든 예제를 수행합니다. Jupyter 노트북에 익숙하지 않은 경우 Python 프로그래밍의 세계로 뛰어들기 전에 이 시리즈의 이전 비디오를 시청하는 것이 좋습니다. 더 이상 고민하지 않고 이 강의에서 배우게 될 내용에 대해 간략히 살펴보겠습니다.

이 비디오가 끝나면 Python의 다음 측면을 잘 이해할 수 있습니다.

  1. 텍스트 표시
  2. 변수
  3. 산술 연산자
  4. 비교 연산자

Python 프로그래밍 언어의 개념과 기능을 이해하는 데 도움이 되는 다양한 예시와 데모를 통해 이러한 각 주제를 자세히 살펴보겠습니다. Python에서 텍스트를 표시하는 방법을 배우는 것으로 시작하겠습니다. Python에서 한 줄의 텍스트를 표시하려면 print() 함수를 사용합니다. 표시하려는 텍스트는 작은따옴표로 묶인 print() 함수의 인수로 전달됩니다. Python에서는 텍스트의 리터럴 문자열을 작은따옴표로 묶는 것이 일반적입니다. 이것은 Python이 텍스트 문자열과 다른 텍스트 기반 프로그래밍 명령을 구별하는 데 도움이 됩니다.

아래 예에서 파운드 기호(#)로 시작하는 print() 함수 앞에 행이 있음을 알 수 있습니다. 이 줄을 주석이라고 합니다. 댓글은 사람이 사용하기 위한 것입니다. 특정 코드 섹션의 목적을 이해하는 데 도움이 되고 다른 사람들이 코드를 더 쉽게 이해할 수 있습니다. Python은 주석을 실행할 수 없는 명령문으로 간주하여 주석을 무시합니다. 따라서 코드의 기능에 영향을 주지 않습니다. 텍스트 출력에 줄 바꿈을 포함하려면 이스케이프 시퀀스 \n(개행)을 사용할 수 있습니다. 그러면 해당 지점에 줄바꿈이 삽입됩니다.

이제 이러한 기술의 데모를 살펴보겠습니다. 이 노트북의 첫 번째 코드 셀에는 print() 함수를 사용하여 화면에 한 줄의 텍스트를 표시하는 간단한 예제가 있습니다. 실행 버튼을 클릭하면 "Hello, my name is Dan!" 표시됩니다. 다음 코드 셀에서는 \n 새 줄 기호를 사용하여 print() 함수를 한 번만 호출하여 여러 줄의 텍스트를 표시합니다. 코드를 실행하면 Python은 두 줄의 텍스트를 화면에 인쇄합니다. 이제 텍스트 표시를 다루었으므로 Python의 변수로 이동하겠습니다.

변수는 컴퓨터 메모리에서 기호로 명명된 저장 위치입니다. 각 변수에는 이름과 값이 있으며 필요에 따라 변경할 수 있습니다. 변수는 프로그램에서 데이터를 추적하는 데 매우 유용합니다. 예를 들어 변수를 사용하여 콘서트 티켓 판매 수를 저장할 수 있습니다. 추가 티켓이 판매될 때마다 변수 값을 업데이트하여 올바른 개수를 반영할 수 있습니다.

Python에서 변수는 텍스트, 정수 또는 부동 소수점(소수점이 포함된 숫자)과 같은 모든 유형의 데이터를 보유할 수 있습니다. 새 변수를 만들려면 단순히 이름과 값을 할당하기만 하면 됩니다. 개념을 더 잘 이해하기 위해 몇 가지 예를 살펴보겠습니다. 첫 번째 예에서는 "x"라는 변수를 선언하고 값 33을 할당합니다. 두 번째 예에서는 "current_price"라는 변수를 선언하고 값 42.99를 할당합니다.

변수에 할당된 값은 숫자, 텍스트 또는 기타 유효한 데이터 유형일 수 있습니다. 변수에 값을 할당하면 print() 함수를 사용하여 해당 값을 화면에 표시할 수 있습니다. 세 번째 예에서는 print() 함수를 사용하여 변수 "x"의 값을 표시합니다. 네 번째 예에서 변수 "current_price"에 대해 동일한 작업을 수행합니다.

변수를 인쇄하면 해당 값을 보고 필요에 따라 작업할 수 있음을 알 수 있습니다. 변수를 직접 인쇄하는 것 외에도 변수를 텍스트 출력에 통합하는 또 다른 방법이 있습니다. 텍스트와 변수 값을 결합하는 과정을 단순화하는 format() 함수를 사용할 수 있습니다. 이 경우 원하는 출력 텍스트를 정의하고 중괄호 {}를 자리 표시자로 사용하여 변수의 위치를 나타냅니다. format() 함수 내에서 원하는 순서로 변수를 제공합니다.

이를 실제로 확인하기 위해 예를 살펴보겠습니다.

다섯 번째 예에는 값이 "Delicious Nachos"인 "product_name"이라는 변수가 있습니다. 제품 이름이 포함된 메시지를 표시하려고 합니다. 우리는 "I love {}!"라는 텍스트를 정의합니다. 변수 값에 대한 자리 표시자로 {}를 사용하여 원하는 출력으로. format() 함수 내에서 변수 "product_name"을 제공합니다. 코드를 실행하면 Python은 자리 표시자를 변수 값으로 대체하고 "I love Delicious Nachos!"라는 결과를 인쇄합니다. 이 방법은 특히 여러 변수 또는 더 복잡한 메시지로 작업할 때 더 많은 유연성과 동적 텍스트 출력을 허용합니다. 이제 변수를 다루었으므로 Python의 산술 연산자로 이동하겠습니다.

Python은 변수에 대해 수학 연산을 수행할 수 있는 다양한 산술 연산자를 제공합니다.

가장 일반적으로 사용되는 산술 연산자는 다음과 같습니다.

  • 추가: +
  • 빼기: -
  • 곱셈: *
  • 분할: /
  • 거듭제곱: **
  • 모듈로: %

이러한 연산자는 숫자 변수와 함께 사용하여 계산을 수행할 수 있습니다.

다음 예제에서는 두 개의 변수 "a"와 "b"를 사용하여 이러한 산술 연산자 중 일부를 보여줍니다.

먼저 "a"라는 변수를 선언하고 값 5를 할당합니다. 다음으로 "b"라는 다른 변수를 선언하고 "a + 2"라는 식을 할당합니다. "a + 2" 표현은 "a"(5)의 값을 2에 더하여 "b"의 값이 7이 되도록 합니다. 그런 다음 print() 함수를 사용하여 "a"의 값을 표시할 수 있습니다. 화면에 "b"가 표시됩니다.

코드를 실행하면 Python은 표현식을 평가하고 각각 5와 7인 "a"와 "b"의 값을 표시합니다.

또한 값을 빼려면 빼기 연산자(-), 값을 곱하려면 곱하기 연산자(*), 값을 나누려면 나누기 연산자(/), 값을 제곱으로 올리려면 지수 연산자(**)를 사용할 수 있습니다. 나눗셈 연산의 나머지를 계산하기 위한 모듈로 연산자(%). 이러한 산술 연산자는 복잡한 계산을 수행하기 위해 다양한 방식으로 조합되고 사용될 수 있습니다.

마지막으로 Python의 비교 연산자에 대해 간략하게 살펴보겠습니다. 비교 연산자를 사용하면 두 값을 비교하고 관계를 결정할 수 있습니다.

가장 일반적으로 사용되는 비교 연산자는 다음과 같습니다.

  • 같음: ==
  • 같지 않음: !=
  • 보다 큼: >
  • 미만: <
  • 크거나 같음: >=
  • 보다 작거나 같음: <=

이러한 연산자를 사용하면 True 또는 False의 부울 값을 반환하여 비교 결과를 나타냅니다.

예를 들어 a == b 식은 "a" 값이 "b" 값과 같으면 True를 반환하고 그렇지 않으면 False를 반환합니다. 다음 예에서는 서로 다른 비교 연산자를 사용하여 두 변수 "a"와 "b"의 값을 비교합니다. print() 함수를 사용하여 이러한 비교 결과를 화면에 표시합니다. 코드를 실행하면 Python은 각 비교 표현식을 평가하고 해당 부울 값을 표시합니다. 출력에 각 비교 결과(참 또는 거짓)가 표시되는 것을 볼 수 있습니다.

비교 연산자는 변수 간의 관계에 따라 코드의 다른 부분을 조건부로 실행하는 데 유용합니다.

이것으로 Python 프로그래밍의 기초에 대한 첫 번째 강의를 마칩니다. 이 단원에서는 다음을 다뤘습니다.

  • print() 함수를 사용하여 텍스트 표시
  • 변수 선언 및 사용
  • 산술 연산자로 수학 계산 수행
  • 비교 연산자를 사용하여 값 비교

이 수업을 통해 Python 프로그래밍에 대한 탄탄한 기초를 다졌기를 바랍니다. 다음 강의에서는 문자열, 정수 및 부동 소수점을 포함한 데이터 유형에 대해 자세히 살펴보겠습니다.

질문이 있거나 다루는 주제에 대해 추가 설명이 필요한 경우 언제든지 문의하십시오. 시청해 주셔서 감사합니다. 다음 강의에서 뵙겠습니다!

 

파이썬 기초 - 파트 02



파이썬 기초 - 파트 02

저는 Soper 박사입니다. 오늘 Python 프로그래밍 언어의 기초에 대한 3부작 시리즈의 두 번째 기사를 발표하게 되어 기쁩니다.

오늘 수업을 시작하기 전에 공유할 정보는 이전 수업에서 개발한 지식과 기술을 기반으로 한다는 점을 강조하고 싶습니다. 따라서 이전 비디오를 볼 기회가 없다면 Python에 대한 이 강의를 시작하기 전에 시청하는 것이 좋습니다.

이제 이 단원에서 배울 수 있는 내용을 간략하게 검토해 보겠습니다.

이 비디오가 끝나면 Python의 다음 측면에 대한 지식을 얻을 수 있습니다.

  1. 기울기
  2. 넘파이 배열
  3. if 문
  4. 논리 연산자

강의 전반에 걸쳐 이러한 각 주제를 자세히 살펴보고 Python 프로그래밍 언어 내에서 해당 기능을 보여주는 예시와 데모를 제공합니다.

Python에서 목록에 대해 논의하는 것으로 시작하겠습니다.

파이썬에서 목록은 단순히 이름이 지정된 항목 모음입니다. 이러한 항목은 숫자, 텍스트, 변수, 개체 및 기타 목록을 포함하여 모든 유형이 될 수 있습니다! 목록에 항목으로 다른 목록이 포함되어 있으면 다차원 목록이라고 합니다.

설명을 위해 몇 가지 예를 살펴보겠습니다. 첫 번째 예에서는 "int list"라는 목록을 만들고 해당 요소에 값 -3, 7, 4, 0, -2 및 342를 할당합니다. 단순한 1차원 목록을 벡터로 상상할 수 있습니다. Python은 대괄호로 목록을 식별합니다. 목록의 요소에 값을 할당하기 위해 대괄호 안에 쉼표로 구분합니다. 목록은 모든 데이터 유형의 항목을 수용할 수 있음을 기억하십시오.

두 번째 예에서는 행성 목록을 선언하고 태양계에서 알려진 모든 행성의 이름을 요소로 할당합니다. 명왕성은 2006년 국제 천문 연맹(International Astronomical Union)에서 "왜행성"으로 강등되었으므로 이 목록에 포함되지 않았습니다. 세 번째 예제로 이동하여 2차원 목록을 선언합니다. 즉, 이 목록의 요소도 목록입니다. 2개의 행과 3개의 열이 있는 2x3 행렬로 생각할 수 있습니다.

이제 파이썬에서 목록이 선언되고 활용되는 몇 가지 데모를 살펴보겠습니다. 첫 번째 코드 셀에서는 앞서 논의한 세 가지 목록을 간단히 선언합니다. 이 셀을 실행할 때 출력이 표시되지 않을 것입니다. 왜냐하면 우리는 단순히 Python에 이 세 가지 목록을 만들고 컴퓨터 메모리에 저장하도록 지시하기 때문입니다. 후속 코드 셀에서는 목록 내의 특정 값에 액세스하는 방법을 살펴봅니다. 그러나 계속 진행하기 전에 Python의 인덱싱을 이해하는 것이 중요합니다.

Python은 0부터 시작하는 인덱싱 시스템을 사용합니다. 즉, 목록이나 배열과 같은 컬렉션을 처리할 때 첫 번째 항목의 인덱스는 0이고 두 번째 항목의 인덱스는 1입니다. 설명을 위해 "정수 목록"을 예로 들어 보겠습니다. 이 목록에는 6개의 값이 포함되어 있습니다. 목록의 다섯 번째 항목에 액세스하려는 경우 해당 항목의 인덱스는 4입니다.

이 제로 기반 인덱싱 시스템을 파악한 후 다음 코드 셀은 "planets" 목록에서 세 번째 행성의 이름을 간단히 인쇄합니다. 이 경우에는 "Earth"입니다. 목록의 세 번째 요소이므로 인덱스 위치 2에 위치해야 합니다. 실행 버튼을 클릭하여 출력이 예상대로 나오는지 확인하고 지구가 실제로 태양에서 세 번째 암석인지 확인합니다.

계속해서 이 수업의 다음 주제인 Python의 NumPy 배열을 살펴보겠습니다. 이제 이 단원의 다음 주제인 if 문 및 논리 연산자로 이동하겠습니다. Python은 if 문을 사용하여 조건문을 사용할 수 있는 기능을 제공합니다. if 문을 사용하면 특정 조건이 참인지 거짓인지에 따라 다른 코드 블록을 실행할 수 있습니다. 또한 Python은 여러 조건을 결합할 수 있는 논리 연산자도 제공합니다.

첫 번째 예에서는 'x'라는 변수가 10보다 작은지 확인하는 간단한 if-else 구조가 있습니다. 조건이 참이면 화면에 "x가 10보다 작습니다"를 출력합니다. 그렇지 않고 조건이 거짓이면 "x가 10보다 크거나 같음"을 인쇄합니다. else 문은 if 문의 조건이 거짓일 때 실행할 코드를 지정하는 데 사용됩니다.

if-elif-else 구조를 사용하여 이 구조를 확장하여 여러 가능성을 처리할 수 있습니다. 두 번째 예에서는 사람의 나이가 13세 미만인지 확인하여 추가 조건을 도입합니다. 사람의 나이에 따라 코드는 사람이 어린이, 청소년 또는 성인인지 여부를 결정합니다. elif 문을 사용하면 어떤 조건도 참이 아닌 경우 else 문으로 돌아가기 전에 추가 조건을 확인할 수 있습니다.

Jupyter Notebook에서 작동하는 이러한 if 문과 논리 연산자의 몇 가지 데모를 살펴보겠습니다.

첫 번째 코드 셀에서 'x'라는 변수를 선언하고 해당 값을 설정합니다. 그런 다음 if-else 구조를 사용하여 'x'가 10 미만인지 여부에 따라 특정 메시지를 인쇄합니다. 코드 셀을 실행하고 출력을 관찰해 보겠습니다. 'x'의 값이 현재 10이므로 Python은 "x가 10보다 크거나 같음"을 화면에 출력합니다. 'x'의 값을 -7로 변경하고 코드 셀을 다시 실행하면 다른 결과가 나타납니다. 'x'의 값을 -7로 변경한 후 Python은 이제 "x is less than 10"을 인쇄합니다.

다음 코드 셀에서는 if-elif-else 구조를 구현하여 나이에 따라 사람이 어린이, 청소년 또는 성인인지 판단합니다. 셀을 실행하고 무슨 일이 일어나는지 봅시다. 예상대로 Python은 현재 'age' 변수 값이 5로 설정되어 있기 때문에 "child"를 인쇄합니다. 'age' 값을 변경하고 코드 셀을 다시 실행하면 사람의 나이에 따라 다른 결과를 얻게 됩니다. 다음 항목으로 이동하여 Python의 논리 연산자에 대해 논의해 보겠습니다. Python은 'and', 'or' 및 'not'의 세 가지 논리 연산자를 제공합니다. 이러한 연산자를 사용하면 여러 조건을 동시에 테스트할 수 있습니다.

첫 번째 예에서는 'and' 및 'or' 연산자를 사용하여 두 변수 'x' 및 'y'가 양수인지 확인하는 방법을 보여줍니다. if 문은 'x'와 'y'가 모두 양수인지 확인합니다. 조건 중 하나 이상이 거짓이면 코드는 'x' 또는 'y'가 양수인지 확인하는 elif 문으로 진행합니다. 'x'도 'y'도 양수가 아니면 else 문이 실행됩니다.

두 번째 예에서는 비교 결과를 뒤집거나 뒤집는 데 사용되는 'not' 연산자를 소개합니다. 13세 이상인지 확인합니다. 13세 이상이면 13세 이상이어야 하므로 어린이가 아닙니다. 그렇지 않으면 자녀로 간주됩니다.

Python에서 사용되는 이러한 논리 연산자의 몇 가지 데모를 살펴보겠습니다.

첫 번째 코드 셀에서 'and' 및 'or' 논리 연산자를 사용하여 'x' 및 'y'가 양수인지 확인합니다. 'x'를 5로, 'y'를 -2로 설정했습니다. 셀을 실행하고 출력을 관찰해 봅시다. 'y'는 음수이므로 'and' 연산자의 조건은 거짓입니다. 그러나 'or' 연산자의 조건은 'x'가 양수이므로 참입니다. 따라서 코드는 "x is positive"를 화면에 출력합니다. 이제 'x'의 값을 -3으로 변경하고 코드 셀을 다시 실행해 보겠습니다. 이번에는 'and' 및 'or' 연산자에 대한 조건이 모두 거짓이므로 코드는 else 문으로 진행하고 "x 및 y는 양수가 아닙니다."를 인쇄합니다.

다음 코드 셀에서는 'not' 연산자를 사용하여 나이를 기준으로 어린이가 아닌지 확인합니다. 우리는 '나이' 변수를 10으로 설정했는데, 이는 그 사람이 어린이로 간주된다는 것을 의미합니다. 코드 셀을 실행하고 출력을 관찰해 봅시다. 그 사람의 나이가 13세 미만이므로 'not' 연산자의 조건은 거짓이고 코드는 화면에 "Child"를 출력합니다.

이제 'age' 값을 18로 변경하고 코드 셀을 다시 실행합니다. 이번에는 그 사람의 나이가 13세 이상이므로 'not' 연산자의 조건이 참이고 코드는 "Not a child"를 출력합니다. 이것으로 Python의 목록, NumPy 배열, if 문 및 논리 연산자에 대한 강의를 마칩니다. 이 정보가 유용하고 Python 프로그래밍 여정에 도움이 되기를 바랍니다.

이 시리즈의 다음이자 마지막 부분에서는 루프, 함수 및 파일 처리를 비롯한 고급 주제를 살펴보겠습니다. 그러니 계속 지켜봐주세요!

관심을 가져주셔서 감사합니다. 다음 강의에서 뵙겠습니다!

 

파이썬 기초 - 파트 03



파이썬 기초 - 파트 03

모두 좋은 하루 보내시길 바랍니다. 저는 Soper 박사입니다. Python 프로그래밍 언어의 기초에 대한 세 번째 강의를 위해 여러분과 함께하게 되어 기쁩니다. 오늘 세션에서 우리는 파이썬에 대해 더 깊이 파고들고 여러분의 이해와 숙련도를 향상시킬 몇 가지 핵심 개념을 탐구할 것입니다.

시작하기 전에 이 단원에서 제공하는 정보는 이전 두 단원에서 개발한 지식과 기술을 기반으로 한다는 점을 강조하고 싶습니다. 해당 비디오를 아직 보지 않았다면 Python에 대한 이 강의를 시작하기 전에 시청하는 것이 좋습니다.

이제 이 단원에서 배울 수 있는 내용에 대해 잠시 논의해 보겠습니다. 이 세션이 끝나면 Python의 다음 측면을 포괄적으로 이해하게 됩니다.

  1. "for" 루프
  2. "동안" 루프
  3. 기능
  4. 클래스
  5. 사물

이 단원 전체에서 예시와 데모를 통해 이러한 개념을 살펴보고 Python 프로그래밍 언어로 실제 응용 프로그램을 파악할 수 있습니다.

Python에서 "for" 및 "while" 루프의 세계를 탐구하는 것으로 시작하겠습니다.

일반적으로 루프를 사용하면 일련의 명령을 반복적으로 실행할 수 있습니다. Python은 "for" 루프와 "while" 루프의 두 가지 유형의 루프를 제공합니다. 둘 사이의 주요 차이점은 "for" 루프는 특정 횟수만큼 실행되는 반면 "while" 루프는 특정 조건이 충족될 때까지 계속 실행된다는 것입니다.

1부터 10까지의 정수인 처음 10개의 자연수를 인쇄하는 "for" 루프의 예부터 시작하겠습니다. "for" 루프를 생성하려면 키워드 "for" 뒤에 변수 이름을 사용합니다. 이 경우 변수 "x"를 사용합니다. "for" 루프가 반복됨에 따라 변수 "x"는 각 반복에 대해 다른 값이 할당됩니다. 그런 다음 변수에 반복적으로 할당될 항목 집합을 지정하고 그 뒤에 콜론을 붙입니다. 이 특정 예에서는 Python "range" 함수를 사용하여 항목 집합을 만듭니다. "범위" 함수는 하한과 상한 사이의 숫자 범위를 반환합니다. 특히, 하한은 포괄적인 반면 상한은 제외됩니다. 따라서 이 예에서 숫자의 범위는 1에서 10까지입니다.

루프의 첫 번째 반복 동안 "x" 값은 1이 됩니다. 그 후 두 번째 반복 동안 "x"에 2가 할당되는 식으로 10에 도달할 때까지 계속됩니다. "for" 다음에 들여쓰기된 코드 줄 문은 루프가 반복될 때마다 실행됩니다. 이 예제에서는 단순히 "x" 값을 인쇄하여 1에서 10까지의 숫자가 표시되도록 합니다.

이제 행성의 이름을 인쇄하는 또 다른 "for" 루프를 살펴보겠습니다. 이 경우 "planet"이라는 변수 이름을 사용하여 루프를 제어하고 행성 목록을 반복합니다. 루프가 진행됨에 따라 "planet" 변수에 각 행성의 이름이 하나씩 할당되어 목록에 있는 각 행성의 이름을 인쇄할 수 있습니다.

계속해서 Python의 중첩 루프에 대해 논의해 보겠습니다. 중첩된 루프를 사용하면 하나의 루프(내부 루프라고 함)가 다른 루프(외부 루프라고 함) 내에서 실행됩니다. 내부 루프는 외부 루프가 반복될 때마다 한 번씩 실행됩니다. 예를 들어 외부 루프가 0에서 1 사이의 정수로 "row"라는 변수를 채우고 내부 루프가 0에서 2 사이의 정수로 "column"이라는 변수를 채우는 시나리오를 생각해 보십시오. 이러한 숫자는 행에 해당합니다. 2차원 NumPy 배열의 열 인덱스. 중첩 루프가 진행됨에 따라 먼저 배열의 첫 번째 행에 있는 모든 요소의 값을 인쇄한 다음 두 번째 행으로 이동합니다.

마지막으로 "while" 루프를 살펴보겠습니다. 이러한 유형의 루프에서는 초기에 특정 값으로 설정된 "x"와 같은 제어 변수에 의존합니다. 루프는 "x" 값이 특정 조건을 만족하는 한 계속 실행됩니다. 예를 들어 "x"를 1로 초기화할 수 있으며 "x"가 10 미만으로 유지되는 한 루프는 계속 실행됩니다. 각 반복에서 "x" 값이 업데이트되어 특정 작업을 수행할 수 있습니다. 조건이 더 이상 충족되지 않을 때까지 반복합니다.

이것으로 Python의 "for" 및 "while" 루프에 대한 개요를 마무리합니다. 다음 부분에서는 코드를 효과적으로 구성하고 재사용할 수 있게 해주는 프로그래밍의 기본 개념인 함수를 살펴보겠습니다.

 

강화 학습의 기초


강화 학습의 기초

저는 Soper 박사입니다. 오늘은 인공 지능의 더 넓은 영역에서 중요한 영역인 강화 학습의 기초에 대해 논의할 것입니다. 강화 학습의 기초를 탐구하기 전에 잠시 시간을 내어 이 단원에서 배울 내용을 검토해 봅시다.

이 비디오가 끝나면 다음 내용을 명확하게 이해하게 될 것입니다.

  1. 강화 학습이란 무엇입니까?
  2. 강화학습 기반 인공지능의 근간을 이루는 5가지 원칙 a. 입력 및 출력 시스템. 비. 보상. 씨. 환경. 디. 마르코프 결정 프로세스. 이자형. 교육 및 추론.

이러한 개념을 파악하면 실제 AI 모델 구축을 시작할 수 있는 모든 준비가 완료됩니다. 그러니 시간을 낭비하지 말고 시작합시다!

먼저 "강화 학습"이 무엇을 의미하는지 살펴보겠습니다. 지도 학습 및 비지도 학습과 함께 강화 학습은 기계 학습의 세 가지 주요 패러다임 중 하나입니다.

감독 학습에서 기계는 입력-출력 쌍을 기반으로 출력을 예측하는 일반적인 기능을 학습합니다. 비지도 학습에서 머신은 데이터에 대한 사전 지식 없이 데이터 세트에서 패턴을 발견합니다. 반면 강화 학습은 기계가 누적 보상을 최대화하기 위한 조치를 취할 수 있도록 환경을 이해하도록 기계를 훈련시키는 것을 목표로 합니다. 이를 달성하기 위해 강화 학습에는 환경 탐색과 지금까지 학습된 것을 활용하는 것 사이의 최적의 균형을 찾는 것이 포함됩니다. 이제 강화 학습 기반 AI의 기본이 되는 다섯 가지 원칙을 살펴보겠습니다.

우리가 논의할 첫 번째 원칙은 입력 및 출력 시스템입니다. 이 시스템은 강화 학습에만 국한된 것이 아니라 모든 인공 지능 및 인지 컴퓨팅 시스템의 기본입니다. 입력을 출력으로 변환하는 작업이 포함됩니다.

강화 학습의 맥락에서 입력은 환경의 상태를 나타내는 "상태"라고 합니다. 출력은 "작업"이라고 하며 "다음에 무엇을 해야 합니까?"라는 질문에 답합니다. 강화 학습의 목표는 각 상태에서 작업을 안내하는 최적의 정책을 식별하는 것입니다.

계속해서 보상에 대해 이야기합시다. 보상은 모든 AI 및 인지 컴퓨팅 시스템에서 중요한 역할을 합니다. 성능에 대해 시스템에 알리는 지표 역할을 합니다. 보상 기능은 해결 중인 문제에 따라 이득을 최대화하거나 손실을 최소화하도록 설계할 수 있습니다. 즉시 및 누적 보상은 시간이 지남에 따라 총 누적 보상을 최대화하는 것으로 간주됩니다.

세 번째 원칙은 환경(environment)으로, 강화 학습 시스템이 작동하는 설정 또는 주변 환경을 의미합니다. 환경은 상태 및 보상에 대한 정보를 제공합니다. 또한 주어진 시간에 어떤 행동이 가능한지 결정하는 게임의 규칙을 정의합니다. 처음에 시스템은 해당 작업의 결과에 대해 알지 못하므로 학습을 위해 실험해야 합니다.

다음으로 MDP(Markov Decision Process)가 있습니다. 수학자 Andrey Andreyevich Markov의 이름을 딴 MDP는 결과가 일부는 무작위이고 일부는 의사 결정자의 통제하에 있을 때 의사 결정을 모델링하기 위한 수학적 프레임워크를 제공합니다. 강화 학습에서 AI 시스템은 환경에서 작동하는 의사 결정자 역할을 합니다. MDP에는 개별 시간 단위가 포함되며 시스템은 관찰, 작업, 보상 및 후속 상태에 따라 한 상태에서 다음 상태로 전환됩니다.

마지막으로 교육 모드와 추론 모드가 있습니다. 강화 학습 시스템은 훈련과 추론의 두 단계를 거칩니다. 교육 모드에서 시스템은 여러 교육 주기를 통해 학습하고 최적의 정책을 식별합니다. 얻은 지식을 기반으로 정책을 업데이트합니다. 추론 모드에서 시스템은 완전히 훈련되었으며 추가 업데이트 없이 학습된 정책을 사용하여 작업을 수행하도록 배포됩니다.

강화 학습의 원리를 확실하게 이해했으므로 이제 실제 강화 학습 모델 구축을 시작할 수 있습니다. 다음 두 비디오에서는 실제 문제를 해결하기 위해 Thompson Sampling을 활용하는 강화 학습 모델을 살펴볼 것입니다. 첫 번째 모델은 multi-armed bandit 문제의 탐색-착취 딜레마를 해결하고 두 번째 모델은 시뮬레이션을 사용하여 복잡한 광고 캠페인에서 결과를 최적화합니다.

이 비디오는 Python을 사용하여 AI 모델을 만드는 실습 경험을 제공합니다. 인지 컴퓨팅과 인공 지능에 대한 흥미진진한 모험에 저와 함께 하시길 바랍니다!

이것으로 강화 학습의 기초에 대한 강의를 마칩니다. 이 정보가 흥미로웠기를 바라며 모두 즐거운 하루 보내시기 바랍니다.

 

강화 학습: Thompson 샘플링 및 다중 무장 강도 문제 - 01부



강화 학습: Thompson 샘플링 및 다중 무장 강도 문제 - 01부

저는 Soper 박사입니다. 특히 Thompson Sampling과 유명한 Multi-Armed Bandit Problem에 중점을 둔 강화 학습에 대한 포괄적인 강의의 첫 번째 부분을 소개하게 되어 기쁩니다.

Thompson Sampling 및 Multi-Armed Bandit Problem의 맥락에서 강화 학습의 복잡성을 탐구하기 전에 이 시리즈의 이전 비디오 시청의 중요성을 강조하고 싶습니다. 이러한 앞선 단원은 오늘 살펴볼 개념의 기초 역할을 하며, 아직 숙지하지 않았다면 익혀두는 것이 좋습니다.

이 단원에서 배울 수 있는 내용에 대한 간략한 개요를 제공하기 위해 핵심 사항을 간략하게 설명하겠습니다.

  1. 우리는 multi-armed bandit 문제가 무엇을 수반하는지 이해하는 것부터 시작할 것입니다.
  2. 다중 무장 산적 문제가 중요한 이유를 살펴보겠습니다.
  3. 다음으로 Thompson Sampling과 이 문제와의 관련성을 소개합니다.
  4. 마지막으로 Thompson Sampling의 내부 작동 방식과 탐색-이용 딜레마를 효과적으로 해결하는 방법을 알아봅니다.

다중 무장 산적 문제의 다양한 적용과 의미를 밝혀냄에 따라 앞으로의 여정은 계몽적인 여정이 될 것입니다. 그러니 더 이상 고민하지 말고 탐험을 시작합시다!

Multi-Armed Bandit 문제의 맥락에서 강화 학습의 개념을 파악하려면 먼저 이 문제가 수반하는 것을 정의하는 것이 중요합니다.

Multi-Armed Bandit 문제는 일련의 경쟁 옵션 중에서 제한된 자원의 고정 수량을 할당하는 방법을 결정해야 하는 모든 시나리오를 나타냅니다. 주요 목표는 불확실성에 직면하면서 기대되는 보상을 극대화하는 것입니다.

이 제한된 자원은 시간, 돈, 차례 등과 같은 다양한 형태를 취할 수 있습니다. 또한 사용 가능한 각 옵션에서 받을 수 있는 보상은 완전히 알려지지 않았습니다. 그러나 다양한 옵션에 리소스를 할당함에 따라 각 옵션과 관련된 잠재적인 보상에 대해 점차 더 잘 이해하게 됩니다.

"Multi-Armed Bandit Problem"이라는 이름은 도박 비유에서 유래되었습니다. 한 줄로 늘어선 슬롯머신을 마주한 도박꾼이 자신의 승리 가능성을 최대화하는 기계를 식별하려고 시도한다고 상상해 보십시오. 슬롯머신은 플레이어가 돈을 입금하고 차례대로 참여하는 카지노에서 흔히 볼 수 있는 우연의 게임입니다. 운이 플레이어에게 유리하면 기계는 플레이어가 초기 투자를 초과하기를 바라는 금전적 보상을 분배합니다.

전통적으로 슬롯 머신은 게임을 시작하는 데 사용되는 기계식 레버(팔)로 인해 "외팔이 산적"이라고 불렸습니다. 따라서 도박꾼이 여러 대의 슬롯머신을 만나 어떤 것을 플레이할지 결정해야 하는 경우 고전적인 Multi-Armed Bandit 문제가 발생합니다. 이 문제는 본질적으로 강화 학습의 기본인 탐색-이용 딜레마를 구현합니다.

탐색-이용 딜레마는 도박꾼이 각 기계를 몇 번 플레이해야 하는지 결정하는 데 있습니다. 도박꾼이 자주 보상을 제공하는 것으로 보이는 기계를 발견한 경우, 그 특정 기계를 계속 플레이해야 합니까(이용), 아니면 더 많은 보상 옵션을 찾기 위해 다른 기계를 시도하여 잠재적인 손실을 감수해야 합니까(탐색)?

이제 Multi-Armed Bandit 문제가 왜 그렇게 중요한지 궁금할 것입니다. 글쎄요, 사실 다중 무장 도적 문제는 일상 생활과 비즈니스 환경 모두에 스며들어 현실 세계 어디에나 존재합니다.

개인 생활에서 직면하는 선택을 고려하십시오. 예를 들어 금요일 밤에 좋아하는 식당을 다시 방문할지 또는 이전에 경험하지 못한 새로운 식당을 탐색할지 결정합니다. 마찬가지로 스트리밍할 수 있는 흥미로운 TV 시리즈가 여러 개 있지만 시청할 수 있는 자유 시간이 제한되어 있다고 상상해 보세요. 시간을 투자할 쇼를 어떻게 결정합니까?

Thompson 샘플링은 Multi-Armed Bandit 문제에서 탐색-이용 딜레마를 해결하는 데 사용되는 인기 있는 알고리즘입니다. 베이지안 추론을 활용하여 탐색과 착취의 균형을 맞추는 원칙적인 접근 방식을 제공합니다.

Thompson Sampling의 핵심 아이디어는 산적 문제에서 각 옵션(암)의 진정한 기본 보상 확률에 대한 믿음 또는 확률 분포를 유지하는 것입니다. 이 신념은 팔과의 이전 상호 작용에서 관찰된 보상을 기반으로 업데이트됩니다.

Thompson Sampling은 의사 결정에 확률적 접근 방식을 취합니다. 기대 보상(착용)이 가장 높은 팔을 엄격하게 선택하거나 무작위로 팔을 탐색하는 대신 탐색과 착취의 균형을 맞추는 방식으로 신념 분포에서 팔을 샘플링합니다.

Thompson 샘플링 알고리즘의 단계를 살펴보겠습니다.

  1. 초기화: 각 팔에 대한 신념 분포를 초기화하는 것으로 시작합니다. 이 분포는 각 팔의 실제 보상 확률에 대한 불확실성을 나타냅니다. 일반적으로 베타 분포는 산적 문제에서 보상을 모델링하는 데 일반적으로 사용되는 이항 분포와 공액이므로 사전 분포로 사용됩니다.

  2. 샘플링: 상호 작용의 각 라운드에 대해 각 팔에 대한 신념 분포에서 보상 확률을 샘플링합니다. 이 단계는 보상 확률이 더 높은 불확실성을 가진 무기를 고려하여 탐색을 통합합니다.

  3. 선택: 샘플링된 보상 확률이 가장 높은 팔을 선택합니다. 이 단계는 신념 분포에 따라 더 높은 기대 보상을 받을 가능성이 있는 팔을 선호하여 착취를 통합합니다.

  4. 업데이트: 선택한 팔에서 보상을 관찰하고 베이지안 추론을 기반으로 해당 팔에 대한 믿음 분포를 업데이트합니다. 이 단계는 이전 분포와 관찰된 보상을 사용하여 사후 분포를 업데이트합니다.

반복적으로 샘플링, 선택 및 업데이트함으로써 Thompson Sampling은 관찰된 보상을 기반으로 신념 분포를 조정하고 시간이 지남에 따라 무기 선택을 점차 개선합니다.

Thompson Sampling은 다양한 애플리케이션에서 탐색-이용 딜레마를 해결하기 위한 효과적인 알고리즘임이 입증되었습니다. 온라인 광고, 임상 시험, 추천 시스템 및 불확실성 하에서의 순차적 의사 결정이 관련된 기타 여러 영역에서 널리 사용되었습니다.

Thompson Sampling의 주요 이점 중 하나는 단순성과 구현 용이성입니다. 이 알고리즘은 복잡한 계산이나 하이퍼파라미터 조정이 필요하지 않으므로 많은 실제 시나리오에서 실용적인 선택입니다.

결론적으로 Thompson Sampling은 Bayesian 추론을 통해 탐색과 착취의 균형을 유지함으로써 Multi-Armed Bandit 문제에 대한 우아한 솔루션을 제공합니다. 변화하는 보상 확률에 적응하는 능력과 광범위한 적용 가능성은 강화 학습 및 의사 결정에서 귀중한 도구가 됩니다.

수업의 다음 부분에서는 Thompson Sampling의 수학적 기초를 더 깊이 탐구하고 성능 보장을 탐색할 것입니다. 이 강력한 알고리즘의 복잡성에 대한 흥미진진한 여정을 기대해 주세요!

 

강화 학습: Thompson 샘플링 및 다중 무장 강도 문제 - 02부



강화 학습: Thompson 샘플링 및 다중 무장 강도 문제 - 02부

저는 Soper 박사이고 Thompson Sampling과 유명한 Multi-Armed Bandit Problem의 맥락에서 강화 학습에 대한 수업의 2부를 발표하기 위해 왔습니다.

이 시리즈의 이전 비디오에서는 Multi-Armed Bandit 문제와 이를 해결하기 위해 Thompson Sampling을 활용하는 방법을 이해했습니다.

계속 진행하기 전에 이 강의를 이해하는 데 큰 도움이 될 필수 지식을 제공하는 이전 동영상을 아직 보지 않았다면 시청하는 것이 좋습니다.

오늘 우리는 Thompson Sampling을 활용하여 실제 multi-armed bandit 문제를 해결하는 강화 학습 기반 AI 시스템을 구현하는 데 중점을 둘 것입니다. 이를 위해 Python으로 전환하고 시작합니다! 먼저 작업할 시나리오를 간략하게 검토해 보겠습니다. 슬롯머신을 하기 위해 $1,000가 있는 카지노에 있다고 상상해 보십시오. 6개의 슬롯머신을 사용할 수 있으며 매 턴마다 플레이하는 데 $1의 비용이 듭니다. 주어진 턴에서 승리할 확률을 나타내는 전환율은 기계에 따라 다르며 사용자가 알 수 없습니다.

귀하의 목표는 전환율이 가장 높은 슬롯 머신을 가능한 한 빨리 식별하여 승리 확률을 극대화하는 것입니다.

Python 구현에서는 필요한 라이브러리를 가져오는 것으로 시작합니다. 다행히 이 프로젝트에서는 numpy만 가져오면 됩니다. 다음으로 환경을 정의합니다. 환경 정의는 모든 강화 학습 프로젝트에서 중요한 단계입니다. 여기서는 슬롯 머신을 플레이할 총 턴 수를 지정하는 것으로 시작합니다. $1,000가 있고 각 턴의 비용이 $1이므로 총 1,000턴이 됩니다.

또한 총 슬롯 머신 수를 정의해야 합니다. 이 경우에는 6개입니다. 또한 각 슬롯 머신의 승패를 추적하기 위해 배열을 만들 것입니다. 이러한 배열은 이전 단원에서 설명한 대로 베타 분포의 모양 매개변수 역할을 합니다. 또한 결과의 재현성을 보장하기 위해 난수 생성기의 시드를 설정합니다.

다음으로 각 슬롯 머신에 대해 1%에서 15% 사이의 임의 전환율을 생성합니다. 이러한 전환율은 도박꾼이 특정 기계를 사용했을 때 얼마나 자주 이길 수 있는지를 나타냅니다. 실제 시나리오에서 도박꾼은 이 정보에 액세스할 수 없습니다. 전환율을 생성한 후 화면에 인쇄하여 컴퓨터 메모리에 저장된 값을 관찰합니다.

다음 단계에서는 기본 데이터 세트를 생성합니다. 이 데이터 세트는 각 회전에 대해 하나의 행과 각 슬롯 머신에 대해 하나의 열이 있는 행렬입니다. 이 경우 데이터 세트에는 1,000개의 행과 6개의 열이 있으며, 이는 1,000번의 턴과 6개의 가능한 슬롯 머신을 나타냅니다. 매트릭스의 각 항목은 특정 차례에 특정 슬롯 머신을 플레이한 결과를 나타내며 "1"은 승리를 나타내고 "0"은 패배를 나타냅니다.

데이터 세트를 생성하기 위해 중첩된 "for" 루프를 사용합니다. 데이터 세트를 생성한 후 구조를 파악하기 위해 처음 15개 행을 인쇄합니다.

코드 셀을 실행하면 각각 승패를 나타내는 1과 0으로 채워진 행렬이 표시됩니다. 각 행은 턴에 해당하고 각 열은 슬롯 머신에 해당합니다. 예를 들어, 첫 번째 턴에서 아무 슬롯 머신이나 플레이하면 패배하게 됩니다. 데이터 세트를 사용하면 주어진 차례에 특정 슬롯 머신을 플레이하는 경우 결과를 이해할 수 있습니다.

다음으로 데이터 세트의 각 열에 대한 평균을 표시합니다. 이러한 수단은 시뮬레이션에서 각 슬롯 머신에 대해 기대할 수 있는 실제 전환율을 나타냅니다. 코드 셀을 실행하면 이러한 값이 표시되며, 이 값은 앞에서 정의한 이론적인 전환율에 가깝지만 데이터 세트의 제한된 회전 수와 난수 생성기로 인해 정확하지는 않습니다.

이제 슬롯머신을 1,000번 플레이하는 것을 시뮬레이션하면서 턴당 하나의 머신만 플레이하는 제약 조건을 준수할 때입니다.

중첩된 "for" 루프를 사용하여 외부 루프가 각 턴을 반복하고 내부 루프가 각 슬롯 머신을 반복하면서 시뮬레이션을 수행합니다. 각 턴이 시작될 때 "max_beta" 변수를 -1로 설정합니다. 이 변수는 현재 턴에서 관찰된 가장 큰 베타 값을 추적하는 데 도움이 됩니다.

각 슬롯 머신에 대해 머신의 베타 분포에서 임의의 값을 추출합니다. 여기서 분포의 모양은 특정 머신을 플레이하여 누적된 승패 수에 따라 결정됩니다. 현재 슬롯 머신의 베타 값을 현재 라운드에서 지금까지 관찰된 가장 큰 베타 값과 비교할 것입니다. 더 크면 "index_of_machine_to_play" 변수를 현재 슬롯 머신의 인덱스로 업데이트합니다.

6개의 슬롯 머신 모두의 베타 값을 검사한 후 "index_of_machine_to_play" 변수는 현재 턴에 대해 가장 높은 베타 값을 가진 머신의 인덱스를 저장합니다. 그런 다음 데이터 세트에서 결과를 조회하고 "number_of_positive_rewards" 또는 "number_of_negative_rewards" 배열의 해당 요소를 증가시켜 승패 여부를 기록하여 선택한 슬롯 머신을 재생합니다.

이 프로세스는 1,000 라운드를 모두 완료할 때까지 계속됩니다. 우리의 AI 시스템은 탐색과 착취 사이에서 결정하기 위해 축적된 지식을 활용하여 각 라운드의 환경에서 지속적으로 학습합니다. 1,000 라운드가 모두 끝나면 AI 에이전트가 각 슬롯 머신을 플레이한 총 횟수를 계산하고 그 결과를 화면에 출력합니다.

코드 셀을 실행하면 각 슬롯 머신이 재생된 횟수가 표시됩니다. 보시다시피 우리의 강화 학습 기반 AI 시스템은 슬롯머신 4번이 승리 확률이 가장 높은 것으로 성공적으로 식별했습니다. 누적 보상을 최대화하기 위해 1,000턴 중 695턴에 해당 머신을 플레이하기로 했습니다.

마지막으로 이러한 결과를 관련 기준선과 비교하는 것이 중요합니다. 이 경우 순진한 접근 방식은 각 라운드에서 플레이할 슬롯 머신을 무작위로 선택하는 것입니다. 마지막 코드 셀은 매 턴마다 플레이할 슬롯머신을 무작위로 선택하는 경우 승리 횟수를 계산하여 이 무작위 샘플링 접근 방식을 보여줍니다.

코드 셀을 실행하면 Thompson 샘플링 접근 방식과 무작위 샘플링 접근 방식 간의 비교가 표시됩니다. 보시다시피 Thompson Sampling 접근 방식은 순진한 무작위 샘플링 접근 방식에 비해 훨씬 더 많은 성공을 거두었습니다. 따라서 우리 도박꾼은 Thompson Sampling을 활용하는 것이 현명할 것입니다!

이 단원에서는 실제 결정 문제를 해결하기 위해 시리즈에서 지금까지 얻은 지식을 적용했습니다. 특히 우리는 Thompson Sampling을 사용하여 실제 Multi-Armed Bandit 문제를 해결하는 완전한 강화 학습 기반 인공 지능 시스템을 Python으로 성공적으로 구축했습니다.

시리즈의 이 단계에서 의사 결정을 지원하는 데 있어 AI 도구의 유용성에 대한 이해를 발전시키기 시작하셨기를 바랍니다. 다른 실제 문제를 해결하기 위해 이러한 기술을 영리하고 혁신적으로 적용하는 것을 상상할 수도 있습니다.

이 시리즈의 다음 비디오에서는 복잡한 광고 캠페인에 적용되는 보다 정교한 버전의 Thompson Sampling 기반 강화 학습을 살펴보겠습니다. 그 비디오에도 저와 함께 하도록 여러분을 초대합니다.

이것으로 Thompson Sampling과 유명한 Multi-Armed Bandit Problem의 맥락에서 강화 학습에 대한 강의 2부를 마칩니다. 이 수업이 재미있었기를 바라며 다음 시간까지 좋은 하루 되세요!

 

Python 기반의 수익 극대화 강화 학습 기반 AI 시스템



Python 기반의 수익 극대화 강화 학습 기반 AI 시스템

좋은 하루 되세요! 소퍼 박사입니다. 오늘 우리는 강화 학습 기반 AI 시스템이 여러 옵션과 수백만 명의 고객이 관련된 복잡한 시나리오에서 기업 이익을 효과적으로 극대화할 수 있는 방법을 보여주는 Python의 포괄적인 예를 탐구할 것입니다.

이 비디오에서 보여주는 기술은 이 시리즈의 이전 강의에서 소개되고 광범위하게 논의되었습니다. 이전 동영상을 볼 기회가 없다면 이 동영상을 진행하기 전에 시청하는 것이 좋습니다.

Python으로 코딩을 시작하기 전에 Thompson 샘플링 강화 학습을 기반으로 하는 AI 시스템을 사용하여 이 비디오에서 해결하고자 하는 비즈니스 문제에 대해 논의해 봅시다.

천만 명의 고객을 자랑하는 무선 회사에서 근무한다고 상상해 보십시오. 회사는 스마트폰 업그레이드 프로그램을 출시하여 이익을 늘리기로 결정했습니다. 고객이 스마트폰을 업그레이드하도록 유도하기 위해 회사의 마케팅 팀은 8개의 뚜렷한 광고 캠페인을 고안했습니다. 각 캠페인은 고객에게 특정 기능, 프로모션 또는 할인을 제공합니다. 그러나 관련 기능, 프로모션 및 할인으로 인해 회사에 다양한 비용이 발생하므로 각 캠페인의 평균 수익은 다양합니다. 회사는 각 광고 캠페인에 대한 판매당 비용과 이익을 계산할 수 있지만 각 캠페인이 얼마나 효과적인지는 불확실합니다. 특정 캠페인은 매우 효과적일 수 있지만 다른 캠페인은 중요한 결과를 얻지 못할 수 있습니다.

우리의 목표는 스마트폰 업그레이드 프로그램에 대한 회사의 이익을 극대화할 수 있는 AI 시스템을 구축하는 것입니다. 우리의 목표는 단순히 프로그램에 참여하는 고객 수를 최대화하는 것이 아니라는 점에 유의해야 합니다. 대신, 우리는 각 광고 캠페인에 노출된 고객 수뿐만 아니라 각 캠페인의 판매 창출 효과 및 판매당 평균 수익에 따라 수익을 최적화하는 것을 목표로 합니다. 비즈니스 문제에 대한 명확한 이해를 바탕으로 Python으로 전환하고 구현을 시작하겠습니다.

이 노트북의 코드를 설명하기 전에 이 노트북에 대한 링크는 비디오 설명에서 사용할 수 있음을 알려드립니다. 노트북 사본을 자유롭게 다운로드하여 실험하거나 특정 요구 사항에 적응하십시오. 평소와 같이 필요한 Python 라이브러리를 가져오는 것으로 시작합니다. 이 프로젝트에는 두 개의 라이브러리가 필요합니다. NumPy는 다양한 확률 분포에서 무작위 값을 생성하는 데 활용하고, 로케일은 통화 값의 형식을 적절하게 지정하는 데 사용할 것입니다. 우리의 목표는 이익을 극대화하는 것이므로 이 프로젝트에서 금전적 가치를 광범위하게 다룰 것입니다. 현재 로케일을 미국으로 설정하면 Python이 통화 값을 미국 달러로 형식화하고 쉼표를 사용하여 큰 숫자를 구분합니다. 다른 통화 형식을 선호하는 경우 그에 따라 로케일을 자유롭게 수정하십시오.

다음 코드 줄은 난수 생성기의 시드를 설정합니다. 이렇게 하면 노트북을 다운로드하고 실행하기로 선택한 경우 이 비디오에서 관찰된 정확한 결과를 재현할 수 있습니다.

다음 작업은 다양한 광고 캠페인에 대한 정보를 저장할 클래스를 정의하는 것입니다. 우리는 이 클래스를 활용하여 각 광고 캠페인을 나타내는 객체를 생성하고 각 캠페인의 속성이나 특성을 유지할 것입니다. 이러한 방식으로 캠페인 개체를 사용하면 나머지 프로그램 논리에서 모든 캠페인 관련 세부 정보를 분리할 수 있으므로 AI가 학습하고 결정을 내리는 방법에 대한 이해가 크게 향상됩니다.

보시다시피 각 캠페인 개체는 고유한 캠페인 ID를 제공하여 초기화됩니다. __init__ 함수는 이후에 NumPy를 사용하여 캠페인에 1%에서 20% 사이의 임의 전환율을 할당하여 균일한 확률 분포에서 임의의 값을 추출합니다. 전환율은 특정 광고 캠페인에 노출되면 스마트폰을 업그레이드할 고객의 비율을 의미합니다. 무선 회사가 이 정보에 대한 지식이 부족하다는 점은 주목할 가치가 있습니다. 또한 NumPy를 사용하여 각 캠페인에 대해 $100에서 $200 범위의 성공적인 판매당 임의 이익을 할당합니다. 이러한 이익 값을 무작위로 할당하지만 각 광고 캠페인에 대해 무선 회사에서 제공하는 특정 값을 사용하는 것도 동일하게 가능합니다. 마지막으로 이 클래스에는 캠페인의 성공적인 판매당 이익을 반환하는 get_profit() 메서드가 포함되어 있습니다.

Campaign 클래스의 코드는 다음과 같습니다.

import numpy as np

class Campaign:
    def __init__( self , campaign_id):
         self .campaign_id = campaign_id
         self .conversion_rate = np.random.uniform( 0.01 , 0.20 )
         self .profit_per_sale = np.random.uniform( 100 , 200 )
    
    def get_profit( self ):
         return self .profit_per_sale

이제 Campaign 클래스를 정의했으므로 Thompson 샘플링을 기반으로 강화 학습 알고리즘을 구현할 수 있습니다. 알고리즘을 캡슐화할 ThompsonSampling이라는 클래스를 만듭니다.

ThompsonSampling 클래스에는 다음과 같은 속성과 메서드가 있습니다. num_campaigns: 광고 캠페인의 수.

  • 캠페인: 사용 가능한 광고 캠페인을 나타내는 캠페인 개체 목록입니다.
  • total_sales: 각 캠페인의 총 판매 수를 추적하는 목록입니다.
  • total_profits: 각 캠페인의 총 수익을 추적하는 목록입니다.
  • num_trials: Thompson 샘플링 알고리즘의 총 시도 또는 반복 횟수입니다.
  • trial_results: 각 시도의 결과, 즉 선택한 캠페인과 그에 따른 수익을 저장하는 목록입니다.

ThompsonSampling 클래스의 메서드는 다음과 같습니다.

  • initialize_campaigns(): 지정된 수의 캠페인으로 캠페인 개체 목록을 초기화합니다.
  • select_campaign(): Thompson 샘플링 알고리즘을 구현하여 각 시도에 대한 캠페인을 선택합니다.
  • update_statistics(): 선택한 캠페인 및 결과 수익을 기반으로 총 판매 및 수익을 업데이트합니다.
  • run_trials(): 지정된 수의 시도를 실행하고 결과를 기록합니다.

다음은 ThompsonSampling 클래스의 코드입니다.

 class ThompsonSampling:
    def __init__( self , num_campaigns, num_trials):
         self .num_campaigns = num_campaigns
         self .campaigns = []
         self .total_sales = [ 0 ] * num_campaigns
         self .total_profits = [ 0 ] * num_campaigns
         self .num_trials = num_trials
         self .trial_results = []
    
    def initialize_campaigns( self ):
         for i in range( self .num_campaigns):
             self .campaigns.append(Campaign(i))
    
    def select_campaign( self ):
        samples = []
         for campaign in self .campaigns:
            profit = campaign.get_profit()
            sample = np.random.normal(profit, 1.0 / campaign.conversion_rate)
            samples.append(sample)
        selected_campaign = np.argmax(samples)
         return selected_campaign
    
    def update_statistics( self , trial, selected_campaign, profit):
         self .total_sales[selected_campaign] += 1
         self .total_profits[selected_campaign] += profit
         self .trial_results.append((trial, selected_campaign, profit))
    
    def run_trials( self ):
         for trial in range( self .num_trials):
            selected_campaign = self .select_campaign()
            profit = self .campaigns[selected_campaign].get_profit()
             self .update_statistics(trial, selected_campaign, profit)

이제 ThompsonSampling 클래스를 구현했으므로 계속해서 클래스의 인스턴스를 만들고 알고리즘을 실행할 수 있습니다. 이 예에서는 캠페인 수를 8로, 시도 수를 1000으로 설정합니다. 평가판을 실행한 후 각 캠페인의 총 판매 및 수익을 표시합니다.

Thompson 샘플링 알고리즘을 실행하는 코드는 다음과 같습니다.

num_campaigns = 8
num_trials = 1000

ts = ThompsonSampling(num_campaigns, num_trials)
ts.initialize_campaigns()
ts.run_trials()

for i in range(num_campaigns):
    total_sales = ts.total_sales[i]
    total_profits = ts.total_profits[i]
    print(f "Campaign {i}: Total Sales = {total_sales}, Total Profits = {total_profits}" )
캠페인 및 시도 횟수와 같은 특정 요구 사항에 따라 코드를 수정할 수 있습니다. 또한 각 캠페인에 대한 추가 정보를 캡처하기 위해 더 많은 속성과 메소드로 Campaign 클래스를 확장할 수 있습니다.
 

Q-Learning: Python의 완전한 예


Q-Learning: Python의 완전한 예

저는 Soper 박사입니다. 오늘 저는 Q-러닝을 사용하는 Python 기반 AI 시스템에 대한 자세한 설명을 제공하게 되어 기쁩니다. 이번 강의는 이전 영상에서 다뤘던 개념을 바탕으로 진행되므로 Q-러닝에 익숙하지 않으신 분들은 이전 영상을 보시고 진행하시기를 권해드립니다.

이 단원에서는 성장하는 전자 상거래 회사가 직면한 비즈니스 문제를 다룰 것입니다. 이 회사는 새로운 창고를 건설하고 있으며 창고 로봇을 사용하여 피킹 작업을 자동화하려고 합니다. 창고 로봇은 피킹을 포함한 다양한 창고 작업을 처리하도록 설계된 자율 지상 차량입니다.

피킹은 고객 주문을 이행하기 위해 창고 내의 여러 위치에서 개별 항목을 수집하는 프로세스를 말합니다. 선반에서 품목을 선택하면 전자 상거래 회사는 배송을 위해 로봇이 창고 내의 특정 포장 영역으로 품목을 운송하기를 원합니다.

효율성과 생산성을 극대화하기 위해 로봇은 포장 영역과 로봇이 이동할 수 있는 창고 내의 다른 모든 위치 사이의 최단 경로를 학습해야 합니다. 이 비디오에서 우리의 목표는 Q-러닝을 사용하여 이 작업을 수행하는 것입니다.

먼저 창고 로봇 시나리오의 환경을 소개하겠습니다. 창고는 다이어그램으로 나타낼 수 있습니다. 각 검은색 사각형은 항목 보관 위치(선반 또는 보관함)를 나타내고 각 흰색 사각형은 로봇이 탐색에 사용할 수 있는 통로를 나타냅니다. 녹색 사각형은 항목 포장 영역의 위치를 나타냅니다.

전체적으로 창고에는 121개의 위치가 있으며 각 위치는 특정 시점에서 로봇이 자신을 찾을 수 있는 상태 또는 상황을 나타냅니다. 각 상태는 행 및 열 인덱스로 식별할 수 있습니다. 예를 들어, 항목 포장 영역은 위치(0, 5)에 있습니다. 검은색과 녹색 사각형은 최종 상태입니다. 즉, AI 에이전트가 훈련 중에 로봇을 이 영역 중 하나로 몰아넣으면 훈련 에피소드가 종료됩니다. 녹색 사각형은 목표 상태를 나타내고 검은색 사각형은 실패 상태를 나타냅니다. 로봇이 항목 저장 영역에 충돌하면 실패로 간주되기 때문입니다.

다음으로 AI 에이전트가 사용할 수 있는 작업에 대해 논의해 보겠습니다. AI 에이전트는 위, 오른쪽, 아래 또는 왼쪽의 네 가지 방향 중 하나를 선택할 수 있습니다. 에이전트의 목표는 로봇이 항목 보관 영역에 충돌하는 것을 방지하는 작업을 학습하는 것입니다.

이제 시나리오에 대한 보상 구조를 살펴보겠습니다. 창고의 각 상태(위치)에는 보상 값이 할당됩니다. AI 에이전트의 학습을 돕기 위해 목표 상태를 제외한 모든 상태에 대해 부정적인 보상(처벌)이 사용됩니다. 패키징 영역(목표 상태)에는 100의 보상 값이 지정되고 다른 모든 상태에는 -100의 보상 값이 지정됩니다. 부정적인 보상을 사용하면 AI 에이전트가 처벌을 최소화하여 목표에 이르는 최단 경로를 찾을 수 있습니다. 흰색 사각형에 대한 양의 보상은 에이전트의 목표가 누적 보상을 최대화하는 것이기 때문에 사용하지 않으며, 흰색 사각형에 양의 보상을 사용하면 에이전트가 목표에 도달하지 않고 목적 없이 보상을 축적할 수 있습니다.

상태, 작업 및 보상으로 환경을 정의했으므로 이제 Python으로 전환하고 코드 구현을 자세히 살펴보겠습니다.

필요한 Python 라이브러리를 가져오는 것으로 시작합니다. 이 프로젝트에는 다차원 배열 생성, 임의 값 생성 및 숫자 작업 수행에 사용되는 numpy 라이브러리만 필요합니다.

다음 단계는 상태부터 시작하여 환경을 정의하는 것입니다. 웨어하우스는 11x11 그리드로 표시되어 121개의 가능한 상태가 됩니다. 상태와 행동의 각 조합에 대한 Q 값을 저장하기 위해 3차원 numpy 배열을 사용합니다. 처음 두 차원은 상태의 행과 열을 나타내고 세 번째 차원에는 AI 에이전트가 취할 수 있는 각 가능한 작업에 대한 하나의 요소가 포함됩니다.

다음으로 에이전트가 사용할 수 있는 네 가지 작업(위, 오른쪽, 아래, 왼쪽)을 정의합니다.

코드 구현을 계속하겠습니다.

import numpy as np

# Define the environment
num_rows = 11
num_cols = 11
num_actions = 4

# Create the Q- table
Q = np.zeros((num_rows, num_cols, num_actions))
이제 환경과 Q-table을 정의했으므로 Q-learning 알고리즘 구현으로 넘어갈 수 있습니다. Q-러닝 알고리즘은 다음 단계로 구성됩니다.

  1. Q 테이블을 0으로 초기화합니다.
  2. 학습률(알파), 할인 계수(감마), 탐색률(엡실론) 및 에피소드 수(num_episodes)와 같은 하이퍼 매개변수를 설정합니다.
  3. 각 에피소드:
    • 초기 상태(current_state)를 설정합니다.
    • 현재 상태가 최종 상태에 도달할 때까지 반복합니다.
      • 엡실론 탐욕 정책을 기반으로 작업(current_action)을 선택합니다.
      • 선택한 동작을 수행하고 다음 상태(next_state)와 보상(reward)을 관찰합니다.
      • Q-러닝 공식을 사용하여 현재 상태-행동 쌍의 Q-값을 업데이트합니다.
      • 현재 상태(current_state)를 다음 상태(next_state)로 업데이트합니다.

창고 로봇 시나리오에 대한 Q-러닝 알고리즘을 구현하는 코드는 다음과 같습니다.

# Set the hyperparameters
alpha = 0.1     # Learning rate
gamma = 0.9     # Discount factor
epsilon = 0.1   # Exploration rate
num_episodes = 1000

# Q-learning algorithm
for episode in range(num_episodes):
    # Set the initial state
    current_state = ( 0 , 0 )
    
    # Repeat until the current state reaches a terminal state
    while current_state != ( 0 , 5 ):
        # Select an action based on the epsilon-greedy policy
        if np.random.uniform() < epsilon:
            current_action = np.random.randint(num_actions)
         else :
            current_action = np.argmax(Q[current_state[ 0 ], current_state[ 1 ], :])
        
        # Perform the selected action and observe the next state and the reward
        if current_action == 0 :  # Up
            next_state = (current_state[ 0 ] - 1 , current_state[ 1 ])
        elif current_action == 1 :  # Right
            next_state = (current_state[ 0 ], current_state[ 1 ] + 1 )
        elif current_action == 2 :  # Down
            next_state = (current_state[ 0 ] + 1 , current_state[ 1 ])
         else :  # Left
            next_state = (current_state[ 0 ], current_state[ 1 ] - 1 )
        
        reward = - 1   # Default reward for non-terminal states
        
        # Update the Q- value of the current state- action pair
        Q[current_state[ 0 ], current_state[ 1 ], current_action] = ( 1 - alpha) * Q[current_state[ 0 ], current_state[ 1 ], current_action] + alpha * (reward + gamma * np. max (Q[next_state[ 0 ], next_state[ 1 ], :]))
        
        # Update the current state to the next state
        current_state = next_state
Q-학습 알고리즘을 실행한 후 Q-테이블에는 각 상태-행동 쌍에 대한 학습된 Q-값이 포함되어 주어진 상태에서 특정 행동을 취하는 데 대한 예상 누적 보상을 나타냅니다.

학습된 정책을 테스트하기 위해 Q 테이블을 사용하여 각 상태에 대해 가장 높은 Q 값을 기반으로 작업을 선택할 수 있습니다.

 # Use the learned Q-table to select actions
current_state = ( 0 , 0 )
path = [current_state]

while current_state != ( 0 , 5 ):
    current_action = np.argmax(Q[current_state[ 0 ], current_state[ 1 ], :])
    
     if current_action == 0 :   # Up
        next_state = (current_state[ 0 ] - 1 , current_state[ 1 ])
    elif current_action == 1 :   # Right
        next_state = (current_state[ 0 ], current_state[ 1 ] + 1 )
    elif current_action == 2 :   # Down
        next_state = (current_state[ 0 ] + 1 , current_state[ 1 ])
     else :   # Left
        next_state = (current_state[ 0 ], current_state[ 1 ] - 1 )
    
    current_state = next_state
    path.append(current_state)

print( "Optimal path:" )
for state in path:
    print(state)
이 코드는 학습된 Q-값을 기반으로 시작 상태(0, 0)에서 목표 상태(0, 5)까지의 최적 경로를 인쇄합니다.
사유: