상세 컨텐츠

본문 제목

인공지능 - 인공지능과 탐색

공부

by myeongjaechoi 2024. 3. 14. 19:33

본문

인공지능

  • 인공지능은 사람 처럼 행동하도록 만들어진 장치 또는 소프트웨어를 말함
  • 강한 인공지능 : 사람과 같은 지능을 말함
  • 약한 인공지능 : 특정 문제를 해결할 수 있는 수준의 지능을 말함
  • 인공지능 -> 기계학습 -> 인공신경망 -> 딥러닝

인공지능과 데이터마이닝의 차이

  • 인공지능 - 수학적으로 표현할 수 없었던 복잡한 두뇌를 데이터를 기반으로 흉내내는 것
  • 데이터마이닝 - 대규모 데이터에서 체계적이고 자동적으로 통계적 규칙이나 패턴을 찾아내는 것

머신러닝

  • 컴퓨터가 학습할 수 있도록 하는 알고리즘과 기술을 개발하는 분야
  • 기능 - 분류, 군집화
  • 분류
    • 지도학습 -  A,B를 학습시킴
  • 군집화
    • 자율학습 -  100장 주고 알아서 나눔
  • 타입 - 지도학습, 자율학습, 강화학습
  • 지도학습 - 훈련 데이터로 부터 예측하고자 하는 값을 올바로 추측하는 것
  • 자율학습 - 사람없이 컴퓨터가 스스로 데이터에 대해 학습하는 것
  • 강화학습 - 주어진 환경에서 에이전트가 현재의 상태를 인식하여 행동을 취하고, 이에 따른 포상을 양, 음으로 받는 것

인공신경망

  • 시냅스의 결합으로 네트워크를 형성한 인공뉴런이 학습을 통해 시냅스의 결합세기를 변화시켜, 문제 해결 능력을 가지는 모델

딥러닝

  • 인공신경망에 기반하여 설계된 개념으로 여러 계층의 신경망을 구성하여 학습을 효과적으로 수행하는 것
  • 다중 퍼셉트론이 많이 쌓인 것

탐색 

  • 문제의 답이 될 수 있는 것들의 집합을 공간으로 간주하고 문제에 대한 최적의 해를 찾기 위해 공간을 체계적으로 찾는 것
  • 예 : DFS, BFS, A*알고리즘, mini-max 등

지식표현

  • 문제를 해결하거나 심층적인 추론을 하는 데 사용할 수 있도록 지식을 효과적으로 표현하는 방법
  • 예 : IF-Then, Frame, 술어논리, 명제논리, 스크립트, 퍼지논리, 불확실한 지식을 표현하는 확률적 방법 등

추론

  • 가정이나 전제로 부터 결론을 이끌어 내는 것
  • 전향 추론 - 지식이 규칙으로 표현되고 규칙의 조건부를 만족하는 입력이 주어지면 결론부의 내용이 추론의 결과로 얻어짐
  • 후향 추론 - 어떤 결론이나 결과의 원인을 확인하고자 할 때, 해당 내용과 부합되는 결론부를 갖는 규칙의 조건부의 내용이 원인에 대응

학습

  • 경험을 통해 나중에 동일한 문제나 유사한 문제를 더 잘 해결할 수 있도록 시스템의 구조나 파라미터를 바꾸는 것
  • 기계학습 - 지도학습, 비지도학습, 강화학습

전문가 시스템

  • 특정 문제 영역에 대해 전문가 수준의 해법을 제공하는 것으로, 간단한 제어 시스템에서 복잡한 계산과 추론을 요구하는 시스템에 사용
  • 지식표현 + 추론 -> 규칙 기반 시스템

인공지능에서 가장 기본적인 문제 해결 전략인 탐색에 대해 공부해보겠다.

탐색 기법의 예로, 알파고가 있다.

알파고는 딥러닝과 탐색 기법을 통하여 다음 수를 읽었다.

탐색할 문제의 예

  • 선교사 - 식인종 강 건너기 문제
  • 8 퀸 문제
  • 순회판매자문제(TSP)

이번 시간에 공부해볼 것은, 8-puzzle이다.

문제 설명을 하자면,

숫자 1~8과 빈칸 하나를 랜덤으로 배치한 후, 빈칸이 우측 하단에 오고 1~8이 정렬된 상태가 되도록 빈칸을 이동시키는 것이다.

탐색에 여러 종류가 있지만, 깊이 우선 탐색으로 실습을 해보겠다.

 

OPEN 리스트 : 확장은 되었으나 아직 탐색하지 않은 상태들이 존재하는 리스트

CLOSED 리스트 : 탐색이 끝난 상태들이 존재하는 리스트

State 클래스

board와 이동횟수, 목표를 생성한다.

get_new_board 함수

get_new_board 함수에서 new_board = self.board[:]는 현재 보드의 복사본을 생성한다. 기존 보드를 변경하지 않기 위해,

새로운 보드를 만든다. 그 후, new_board[i1]과 new_board[i2]를 교환하여 새로운 보드 상태를 만든다.

State 클래스의 새로운 인스턴스를 생성하여 새로운 보드 상태와 목표 상태, 그리고 이동 횟수를 포함하는 새로운 노드를 반환한다.

expand 함수

expand 함수는 현재 상태에서 가능한 모든 다음 상태를 생성하고 리스트에 저장 후 반환한다.

현재 0의 인덱스를 찾고, 이것은 빈 칸의 위치이다.

그 다음, 빈 칸의 위치에 따라 상하좌우로 이동할 수 있는지 확인하고 가능한 경우에만 새로운 상태를 생성하여 리스트에 추가한다.

상하좌우로 이동할 때, 각각의 방향에 따라 빈 칸의 위치를 변경하고 새로운 보드 상태를 만들기 위해 get_new_board 함수를 호출한다.

마지막으로 가능한 모든 새로운 상태들을 담은 리스트를 반환한다.

클래스 외 부분

이것은 모든 경우의 수를 찾는 코드이다.

'공부' 카테고리의 다른 글

운영체제- CPU 스케줄링 및 다중 큐  (0) 2024.04.16
운영체제 - 컴퓨터 구조  (0) 2024.03.31
병렬프로그래밍(2) - 루프 병렬화  (0) 2024.03.25
운영체제 - 커널  (1) 2024.03.18
병렬프로그래밍(1)  (0) 2024.03.11

관련글 더보기