인공지능 1주차

LeeYun·2025년 3월 29일

강의 개요

  • 코드중심(Learn-by-doing)
  • 큰 개념 이후 세부사항(Top-down approach)
  • 프로젝트/응용분야 중심(Practical learning)

평가

  • 출석 10%
  • 중간/기말 각 30% : 지필고사(대면)
  • 과제 30% : 코딩 및 분석, 약 4개

교재, 참고

  • 주교재
    • 파이썬으로 만드는 인공지능, 오일석, 이진선 한빛 아카데미, 2021
  • 부교재
    • 케라스 코드예제
    • Hands-On Machine Learning with Scikit-Learn

권장선후수, 유의사항

  • 권장선수 : 이산수학, 파이썬, 데이터과학기초, 알고리즘
  • 기본적인 pseudo code를 읽을 줄 알아야 함.
  1. 인공지능(경북대 강의)
  2. Introduction to Artificial Intelligence with Python(CS50AI, 2020)
  3. MFML (Cassie Kozykov) Youtube
  4. 기계학습개론(경북대)
  5. Introduction to Deep Learning(MIT) Youtube
  6. Machine Learning(Oxford) Youtube
  7. Deep Learning(Stanford CS231N) Youtube
  8. Deep Learning(NYU) Youtube

다양한 어플리케이션

  • Style Transfer
  • Video Enhancement
  • Stock Price Prediction
  • Image Captioning

1. 인간 지능을 흉내 내는 인공지능

1.1 지능이란?

  • 긴 지능 스펙트럼
    돌멩이는 지능이 없다. 스슬 움직이지도 못하고 목적 의식도 없다. 하지만 바이메탈은 온도에 따라 움직이고 온도 조절이라는 뚜렷한 목적이 있다. 그렇다면 바이메탈은 지능이 있는가? 또한 바이메탈을 부착한 다리미는 지능형 다리미인가?
    • 생물의 지능
      꼬마선충→개미→사람→천재
  • 알파고는 어디에 위치하나?
    • 바둑에서 아인슈타인을 이기니까 아인슈타인의 오른쪽인가?
    • 바둑판 둘 줄 아니까 개미의 왼쪽인가?

1.2 인공지능을 바라보는 관점

  • 다양한 관점
    • 긍정에서 부정까지
    • 기대부터 우려까지
    • 이 절에서는 객관적인 시각으로 인공지능을 바라봄
  • <표준국어대사전>의 정의
    • 지능: 계산이나 문장 작성 따위의 지적 작업에서, 성취 정도에 따라 정하여지는 적응 능력
    • 인공지능: 인간의 지능이 가지는 학습, 추리, 적응, 논증 따위의 기능을 갖춘 컴퓨터 시스템
  • [Artificial Intelligence: Foundations of Computational Agents](Poole 저, 2017)
    • 인공지능: the field that studies the synthesis and analysis of computational agents that act intelligently 지능적으로 행동하는 계산 에이전트를 만들고 분석하는 학분 문야
  • 강한 인공지능 vs 약한 인공지능
    • 강한 인공지능: 다양한 지능의 복합체(예, 터미네이터에 등장하는 인조인간)
    • 약한 인공지능: 한가지 지능에 특화된 인공지능(현재 인공지능 제품들, 인공지능 스피커, 언어 번역기, 영상 인식기, 알파고 등)
  • 앨런 튜링의 튜링 테스트
    • 어떤 사람이 보이지 않는 상태에서 두 개체(인간과 AI)와 문자로 대화로 나눈다. 이때 사람이 AI와 인간을 구별할 수 없다면, 그 AI는 인간과 같은 수준의 지능을 가졌다고 판단
    • Can machines think?
    • 튜링 테스트를 통과한 기계는 생각한다고 간주해도 된다.(튜링의 주장)
  • 철학자 존 설의 중국인의 방
    • 컴퓨터 프로그램은 중국어 질문을 전혀 이해하지 못한 채 튜링 테스트를 통과할 수 있음 → 튜링 테스트를 통과해도 생각한다고 말하면 안 됨

1.3 인공지능의 역사

  • 많은 이야기
    • 퍼셉트론과 신경망
    • 인공지능 언어
    • 두번의 인공지능 겨울
    • 인공지능 게임 프로그램
    • 자율주행차의 발전
    • 딥러닝의 시대의 도래
  • 위키 백과
    • "History of artificial Intelligence", "Timeline of artificial Intelligence"로 검색

1.4 시장을 파고드는 인공지능

  • 인공지능 자율 주행
  • 인공지능 의료
  • 인공지능 예술
  • 언어 번역
  • 자율학습하는 인공지능 게임

자율 주행, 의료, 번역은 정답이 있지만 예술, 게임은 정답이 없다. 게임의 경우 경우의 수가 무한히 있는 경우 정답이 없다고 판단

  • 티쳐블 머신
    물체 인식, 음성 인식, 동작 인식 등을 제공하는 플랫폼
  • 사회적 영향과 미래 조망
    • 예상되는 자율주행차의 미래모습
      주변 차와 통신하며 밀집 주행, 신호등 없는 사거리, 사람의 인식 능력을 넘어서는 주행 → 특수한 경우에만 사람에게 면허 발급
    • 직업군의 커다란 변화
      대한민국은 로봇 밀도에서 세계 1~2위를 다투는 나라(로봇 밀도 1만 명당 로봇 수) Frey의 연구에서 702개의 직업에 대해 사라질 위기를 확률로 계산(텔레마케터가 가장 높음), "인공지능이 사람을 몰아낸다"라는 인식보다 "인공지능을 쓰는 사람이 인공지능을 쓰지않는 사람을 몰아낸다"라는 인식이 적절하다.

1.5 지배적인 공학적 관점

  • 인공지능 접근 방법
    • 과학적: 인간의 지능을 충분히 연구한 다음 그 원리를 충실히 모방하는 지능 기계 제작
    • 공학적: 쓸만한 지능 기계를 만들 수 있다면 굳이 인간의 지능 원리를 따르지 않아도 됨(비행기 날개는 새의 날개를 그대로 모방하지 않는다)
    • 현재는 공학적 접근방법이 지배적이다.

1.5.2 규칙 기반 방법론 vs 기계학습 방법론

  • 규칙 기반 방법론
    • 사람이 사용하는 규칙을 수집하여 프로그래밍
    • 예) 필기 숫자 인식 프로그램 : 숫자 3은 "왼쪽에서 보면 위와 아래에 터진 골이 있고, 오른쪽에서 보면 둥근 원호가 중간에서 만나고"와 같은 규칙을 수집
    • 한계 노출: 규칙 위반하는 샘플이 꾸준히 발생
  • 규칙 기반 방법론
    • 인공지능 초반에는 규칙 기반이 대세였으나 1990년부터 기계학습으로 주도권이 이동함
    • 충분한 데이터를 수집한 다음 기계학습 모델을 학습하는 방법(데이터-주도 패러다임)
    • 예) 필기 숫자 인식을 위한 MNIST 데이터셋

1.5.3 파이썬 프로그래밍

  • C와 파이썬
    • 파이썬은 벡터와 행렬 처리를 코딩하는데 편리한 언어
    • 기계 학습은 벡터와 행렬 처리를 많이 수행하므로 파이썬을 주로 사용
    • 핵심 라이브러리는 효율성 때문에 C로 코딩 되어 있음 파이썬은 이들 라이브러리를 호출하는 언어로 사용

읽을 거리

  • S. Russell and P. Norvig, Artificial Intelligence: A Modern Approach, 4th Edition, 2020
  • Goodfellow, Y., Bengio, and A. Courville, Deep Learning, The MIT Press, 2016
  • 오일석, 기계학습, 한빛아카데미, 2017
  • 프랑소와 숄레 (박해선 번역), 케라스 창시자에게 배우는 딥러닝, 길벗, 2018
  • 박응용, Do IT! 점프 투 파이썬, 이지스퍼블리싱, 2019
  • 김진형, AI 최강의 수업, 매일경제신문사, 2020
  • 숀 게리시 (이수겸 번역), 기계는 어떻게 생각하는가?, 이지스 퍼블리싱, 2019

볼거리

  • TED recommends Artificial Intelligence

  • The Age of AI: 유튜브

    • 아이언맨의 배우 로버트 다우니 주니어가 제작한 과학 다큐멘터리
    • 8편의 에피소드로 구성된 시즌
      1. How far is too far?
      2. Healed through AI
      3. Using AI to build a better human
      4. Love, art and stories: decoded
      5. The ‘Space Architects’ of Mars
      6. Will a robot take my job?
      7. Saving the world one algorithm at a time
      8. How AI is searching for Aliens

파이썬으로 시작하는 인공지능

Preview

  • 인공지능은 진입장벽이 낮은 편이지만 상품화는 많은 노력과 인내 필요
    • 인공지능 개발에 필요한 강력한 소프트웨어가 모두 무료이고 클라우드 서비스도 있음
    • 시장에 나가려면 인간 수준의 성능 필요, 시장 경쟁이 치열
  • 훌륭한 프로그래밍 환경이 제공됨
    • 입증된 논문은 구현되어 라이브러리 형태로 제공되며 꾸준히 업그레이드 중
    • 이 책은 이런 강점을 살려 독자가 인공지능 만들기에 쉽게 진입하도록 배려함
  • 프로그래밍 경험 수준에 따른 공부 방법
    • 파이썬에 익숙 → 바로 시작
    • 다른 언어에 익숙하지만 파이썬은 처음 또는 프로그래밍이 처음이라면 → 파이썬 기초와 부록 A numpy와 부록 B matplotlib을 공부한 다음에 시작 또는 바로 시작하고 파이썬 공부를 병행

프로그램 예제

  • 아주 간단한 프로그램
# 연산자 오버로딩 예시
print(12 + 37)  # 숫자는 두 정수를 더하는 연산자
print('python' + ' is exciting.')  # +는 두 문자열을 결합하는 연 산자

# 라이브러리 불러오기
import random  # random이라는 라이브러리를 불러옴

# 정수 난수 생성
a = random.randint(10, 20)  # [10, 20] 사이의 난수를 생성하고 변수 a에 대입
b = random.randint(10, 20)  # [10, 20] 사이의 난수를 생성하고 변수 b에 대입

# 덧셈을 하고 결과를 출력
c = a + b  # a와 b를 더하여 변수 c에 대입
print(a, b, c)  # 변수 a, b, c를 출력
49
python is exciting
10 15 25  

클라우드 방식과 스탠드얼론 방식

  • 클라우드 방식
    • 서버에 환경이 대부분 갖추어져 있어 로그인하면 바로 프로그래밍 가능
    • 인터넷 연결만 있으면 어느 곳에서나 개발 가능, 협업 가능
    • Ex) 구글 Colab, 아마존의 SageMaker, 마이크로소프트의 Azure
    • 내 프로젝트에 최적인 환경을 갖출 수 없는 한계 존재
  • 스탠드얼론 방식
    • 자신에 최적인 환경 구축 가능, 프로그램과 데이터가 자신의 컴퓨터에 저장
    • 소프트웨어를 설치하고 환경을 스스로 구축해야 함
    • 특히 공학자로써 성장할려면 스탠드얼론 방식을 추천함

영리한 프로그래밍 환경: 아나콘다

  • 라이브러리 충돌 가능성

    • 오픈 소스 특성으로 인해 라이브러리 충돌 가능성 발생(함수 API 변경 또는 환경 변수 값 충돌 등)
    • 가상환경을 사용하여 해결
  • 가상환경

    • 프로젝트 별로 별도의 가상 환경을 만들어 일관된 환경 유지
    • 아나콘다는 가상 환경을 지원
  • 프로그래밍 환경 설정: 4단계의 설치

    1. Anaconda 설치
    2. Anaconda를 통한 가상환경 생성
    3. 가상 환경에 Spyder와 텐서플로 모듈을 설치
    4. 스파이더에서 작업 디렉토리 설정
      • 바탕화면에 aipSources 폴더 만들기
      • 스파이더에서 [Tools]-[Preference]-[Current working directory]-[Startup]-[The following directory]를 선택하고 aipSources를 브라우징하여 실행
(base) C:/> conda create -n aip python=3.7
(base) C:/> conda activate aip
(aip) C:/> conda install spyder
(aip) C:/> conda install tensorflow[-gpu]
(aip) C:/> conda list

보통은 가용 가능한 gpu버전으로 설치해주나 가끔씩 안될 때도 있음 그럴때는 인터넷에서 자신의 gpu버전에 맞게 설치해주는 가이드라인을 찾아야 함

언어 번역기: 컴파일러 vs 인터프리터 방식

  • 컴파일러 방식
    • 프로그램 전체를 번역한 다음 한꺼번에 실행
    • 실행이 빠른 장점
    • C, C++ 등
  • 인터프리터 방식
    • 한 라인 씩 번역하고 실행하는 일을 순차적으로 수행
    • 일부 코드만 선택하여 실행하는 일이 가능한 장점
    • 스파이더에서 실행하고자 하는 코드를 마우스로 선택한 다음 F9키를 누름
    • 파이썬 등

인간의 셈 지능

  • 느리고 정확도에 한계
  • 세계주산암산대회(2018) 우승자는 초당 1.3개의 사칙 연산 수행

컴퓨터의 셈 지능

  • 무척 빠르고 정확함. 컴퓨터 하드웨어에서 내장되어 있음

  • 10억 개 덧셈을 11.8초 만에 수행

    import time
    
    start-time.time()
    sum = 0
    for i in range(1, 10000001):
        sum = sum+i
    
    end-time.time()
    
    print("소요시간:", end-start)
    소요 시간: 11.80145525932312

인공지능 프로그래밍 예제: 인공지능 기자

  • 뉴스 기사를 자동으로 작성하는 인공지능
  • <LA 타임스>의 퀘이커봇은 지진 전문 로봇 기자
  • <연합뉴스>의 사커봇은 프리미어 리그 속보 로봇 기자
  • 현재 높은 수준의 자연어 처리와 추론 등의 기술을 사용하여 인간 기자의 능가하는 수준
  • 여기서는 우너시적인 로봇 기자 프로그래밍

손흥민의 경기 결과를 기사로 작성하는 단순한 인공지능 프로그램

from datetime import datetime

# 경기 결과 입력 받는 곳
place = input("경기가 열린 곳은?")
time = input("경기가 열린 시간은?")
opponent = input("상태 팀은?")
goals = input("도움은 몇 개인가요?")
score_me = input("손흥민 팀이 넣은 골 수는")
score_you = input("상대 팀이 넣은 골 수는?")

# 기사 작성하는 곳
news="[프리미어 리그 속보("+str(datetime.now())+")]\n"
news=news+"손흥민 선수는 "+place+"에서"+time"에 열린 경기에 출전하였습니다. "
news=news+"상대 팀은 "+opponent+"입니다. " 
if score_me>score_you:
    news=news+"손흥민 선수의 팀이 "+score_me+"골을 넣어"+score_you+"골을 넣은 상대 팀을 이겼습니다. "
elif score_me<score_you:
    news=news+"손흥민 선수의 팀이 "+score_me+"골을 넣어 "+score_you+"골을 넣은 상대 팀에게 졌습니다."
else:
    news=news+"두 팀은 "+score_me+"대"+score_you+"로 비겼습니다."

if int(goals)>0 and int(aids)>0:
    news=news+"손흥민 선수는 "+goals+"골에 도움 "+aids"개로 승리를 크게 이끌었습니다."
elif int(goals)>0 and int(aids)==0:
    news=news+"손흥민 선수는 "+goals+"골로 승리를 이끌었습니다."
elif int(goals)==0 and int(aids)>0:
    news=news+"손흥민 선수는 골은 없지만 도움 "+aids+"개로 승리하는데 공헌하였습니다. "
else:
    news=news+"아쉽게도 이번 경기에서 손흥민의 발끝은 침묵을 지켰습니다. "

print(news)
경기가 열린 곳은? 런던 스타디움
경기가 열린 시간은? 8월 6일 오후 7시
상대 팀은? 맨체스터 유나이티드
손흥민은 몇 골을 넣었나요? 2
도움은 몇 개인가요? 1
손흥민 팀이 넣은 골 수는? 4
상대 팀이 넣은 골 수는? 2

[프리미어 리그 속보(2020-08-07 09:33:14.128724)]
손흥민 선수는 런던 스타디움에서 12월 12일 오후 7시에 열린 경기에 출전하였습니다. 상대 팀은 맨체스터 유나이티드입니다. 손흥민 선수의 팀이 4골을 넣어 2골을 넣은 상대 팀을 이겼습니다. 손흥민 선수는 2골에 도움 1개로 승리를 크게 이끌었습니다.

확장

  • 문장을 랜덤 선택하여 단조로움 해소
    wording = ["상대 팀을 이겼습니다.", "상대를 대상으로 통쾌한 승리를 거머쥐었습니다.", "상대 팀을 꺾었습니다."]
    news=news+"손흥민 선수의 팀이"+score_me+"골을 넣어"+score_you+"골을 넣은"+random.choice(wording)
  • 자동으로 경기 결과를 크롤링하고 기사를 업로드
    • 프리미어 웹 사이트 파싱
    • 웹 프로그래밍(자바스크립트)
  • 수준 높은 기사 작성
    • 자연어 처리 기술과 word2vec(8.5.5)과 같은 언어 모델 활용

인공지능 프로그래밍 예제 3: 더 똑똑한 인공지능 기자

  • 언어 처리 라이브러리를 활용하면 더 똑똑한 인공지능 기자

  • 이 절은 가장 단순한 축에 속하는 TTS(Text-to-speech) 기능 활용(gtts 라이브러리)

  • 모듈 설치

    (aip) C:/> pip install gtts playsound
  • TTS 프로그래밍

    from gtts import aTTs
    import playsound
    
    tts = gTTS(text=news, lang='ko')
    tts.save("news_Son.mp3")
    playsound.playsound("news_Son.mp3", True)

다양한 라이브러리

profile
AI/Network

0개의 댓글