KPMG Future Academy AI 활용 데이터 분석가 3기 3일차 수업을 2024년 11월 20일에 참석했다. 오전에는 다 같이 기업에서 최신 기술을 적용한 사례를 분석해보기로 했다.
[CES 2024]
이번 CES에서는 로레알에서 기조연설을 했고, 빛으로 머리를 말리는 헤어드라이어를 소개했다. 또 카트리지 방식으로 머리를 염색하는 기기나 손떨림 방지 립스틱 등을 소개했다.
[미래형 탈 것]
또한 내년부터 서울에서 도심 K-UAM(드론) 도심항공이 시범사업을 시작하고 거점 기반 버티포트(정류장)도 개설한다고 한다.
많은 기업이 자율주행에 용이한 전기차량 생산으로 대거 전환하고 있으며, UAM 개발사 JOBY, 리저널 여객기 개발사 Zunum Aero 등 선구적인 기업에서 전기 항공기를 개발해오고 있다.
*Zunum Aero : https://www.electimes.com/news/articleView.html?idxno=220399
*eVTOL (구 UAM) : 일반적으로 드론으로 알려진 수직이착륙기
기타 : 속도에 따라 서로 다른 항공방식으로 개발 및 운영됨
*인간 안전 : 군사력 위주의 전통적인 국가 안보 개념에서 벗어나 인간의 생명과 존엄을 중시하는 안보의 새로운 패러다임이다. 유엔 개발 계획의 1994년 인간 개발 보고서에서 처음 제시되었으며, '공포로부터의 자유'와 '결핍으로부터의 자유'를 초점으로 삼고 있다.
출처 : https://ko.wikipedia.org/wiki/%EC%9D%B8%EA%B0%84_%EC%95%88%EC%A0%84
*DX/AX
*빅카인즈 - 뉴스 분석 : https://www.bigkinds.or.kr/
시스코의 '지능형 와이파이' 키워드 검색 결과와 '클라우드 연결성' 키워드 검색 결과를 조회했으나 기사가 많지 않았다.
*GTC 2024 : TBD
*FME (software) : https://fme.safe.com/ safe software - zapier와 유사한 서비스로 보임.
*캐즘(Chasm)
*SDV (Software Defined Vehicle)는 소프트웨어로 하드웨어를 제어하고 관리하는 자동차
*넷제로 : 대기 중 온실가스 농도 증가를 막기 위해 인간 활동에 의한 배출량을 감소시키고, 흡수량을 증대하여 순배출량이 '0'이 되는 것을 탄소중립 혹은 '넷제로(Net-Zero)'라고 함.
*NPU : AI가속기. Neural Processing Unit.
CES 2024 책을 읽었다.
*이미지 생성 모델 zen3, 드림머신 및 어도비 Firefly 영상 생성 저작권 문제에 대해 언급되었다.
장 보드리야르의 시뮬라크르, 시뮬라시옹 개념이 떠오르는 기술도입 사례였다.
Le simulacre n'est jamais ce qui cache la vérité – c'est la vérité qui cache qu'il n'y en a pas. Le simulacre est vrai.
Jean Baudrillard, Simulacra and Simulation (1981)
시뮬라크르란 결코 진실을 감추는 것이 아니다. 진실이야말로 아무것도 존재하지 않는다는 사실을 숨긴다. 시뮬라크르는 참된 것이다.
하태환 역, 민음사
*시뮬라크르 : 원본도 사실성도 없는 실재, 즉 파생 실재(hyperréel)
*시뮬라시옹 : 시뮬라크르의 동사형
수강생 전원과 각자의 관심사에 따라 선별적으로 특정 기업들의 AI 도입 사례를 분석해서 토론하는 시간을 가졌다.
[팀 혹은 개인 조사 결과]
: https://padlet.com/lupy0612/ai-e58meoyggn82zpzk
나는 'AI 할루시네이션'을 조사하였다.
[엔비디아 AI 기술 활용 사례]
AI 활용 분야 : IT
엔비디아는 자사의 AI 할루시네이션(환각) 문제가 5년 내 해결될 것이라고 예측.
구체적인 사례 설명
엔비디아가 사용한 주요 방법들:
1) NeMo Guardrails 시스템
2) 검색 증강 생성(RAG, Retrieval-Augmented Generation)
3) 자체 검증 메커니즘
4) 지속적인 모델 업데이트와 재학습
관련 자료 및 링크
GatorTronGPT를 사용해 200억 단어 규모의 합성 임상 텍스트를 생성.
https://developer.nvidia.com/blog/develop-secure-reliable-medical-apps-with-rag-and-nvidia-nemo-guardrails/
의견 및 분석
데이터 신뢰성을 검증하는 전통적인 이론 내에 머물고 있는 것으로 보임. NeMo Guardrails의 경우, 1) YAML 파일을 통해 규칙(guardrails) 정의, 2) 파이썬 API를 통한 통합, 3) 다양한 LLM과 호환 가능한 방식을 차용.
다만 방식 상에서 AI Training AI: GatorTronGPT을 활용.
NeMo T5-TTS 모델에서는 LLM 기반의 향상된 음성 합성 기술 및 기존 오픈소스 모델들(Bark, SpeechT5)보다 2배 적은 발음 오류율을 달성하였는데, 1) 단조로운 정렬 사전 지식(monotonic alignment prior) 적용, 2) CTC(connectionist temporal classification) 손실 함수 사용, 3) 텍스트와 음성 간의 더 정확한 정렬 구현을 통해 할루시네이션 문제를 해결 시도하였음.
*NeMo Guardrails
개발자는 네모 가드레일을 통해 세 가지 종류의 경계를 설정할 수 있음:
토피컬 가드레일(Topical guardrails)은 앱이 원치 않는 영역으로 이탈하는 것을 방지한다. 예를 들어, 고객 서비스 도우미가 날씨에 대한 질문에는 답변하지 못하도록 방지한다.
세이프티 가드레일(Safety guardrails)은 앱이 정확하고 적절한 정보로 응답하도록 보장한다. 원치 않는 언어를 필터링하고 신뢰할 수 있는 출처만 언급하도록 강제할 수 있다.
시큐리티 가드레일(Security guardrails)은 앱이 안전한 것으로 알려진 외부 서드파티 애플리케이션에만 연결하도록 제한한다.
오후에는 파이썬 실습을 진행했다.
[파이썬 API]
tracemalloc 모듈 :
파이썬이 할당한 메모리 블록을 추적하는 디버그 도구.
pymalloc 할당자 :
Python은 수명이 짧은 작은 객체(512 바이트 이하)에 최적화된 pymalloc 할당자를 가지고 있다. 이는 32비트 플랫폼에서는 256 KiB, 64비트 플랫폼에서는 1 MiB의 고정 크기를 가진 "아레나"라고 하는 메모리 매핑을 사용한다. 512 바이트보다 큰 할당의 경우 PyMem_RawMalloc()과 PyMem_RawRealloc()으로 대체된다.
[포맷팅]
문자열에 변수나 값 포함시킬 때 사용.
%s : 문자열(String)
%c : 문자 1개(character)
%d : 정수(Integer)
%f : 부동소수(floating-point)
[.format 메소드에서 매개변수 적용하는 방법]
1. 위치(인덱스) 사용:
print('이름:{0}, 과목:{1}, 점수:{2}'.format('홍길동', '수학', 85))
print('이름:{name}, 과목:{subject}, 점수:{score}'.format(name='홍길동', subject='수학', score=85))
name = '홍길동'
subject = '수학'
score = 85
print('이름:{}, 과목:{}, 점수:{}'.format(name, subject, score))
4. 딕셔너리 사용:
student = {'name': '홍길동', 'subject': '수학', 'score': 85}
print('이름:{name}, 과목:{subject}, 점수:{score}'.format(**student))
5. f-string 사용 (Python 3.6+):
name = '홍길동'
subject = '수학'
score = 85
print(f'이름:{name}, 과목:{subject}, 점수:{score}')
[자료구조 합성 예제]
class Node:
def __init__(self, data):
self.data = data
self.next = None
class Stack:
def __init__(self):
self.items = [] # 리스트를 활용한 스택 구현
def push(self, item):
self.items.append(item)
def pop(self):
if not self.is_empty():
return self.items.pop()
return None
def is_empty(self):
return len(self.items) == 0
class Queue:
def __init__(self):
self.items = [] # 리스트를 활용한 큐 구현
def enqueue(self, item):
self.items.append(item)
def dequeue(self):
if not self.is_empty():
return self.items.pop(0)
return None
def is_empty(self):
return len(self.items) == 0
class CompositeDataStructure:
def __init__(self):
self.stack = Stack() # 스택 합성
self.queue = Queue() # 큐 합성
self.current_node = None # 노드 합성
def add_to_stack(self, item):
self.stack.push(item)
def add_to_queue(self, item):
self.queue.enqueue(item)
def process_data(self):
# 스택과 큐의 데이터를 함께 처리하는 예제
while not self.stack.is_empty() and not self.queue.is_empty():
stack_item = self.stack.pop()
queue_item = self.queue.dequeue()
print(f"처리: 스택 항목 {stack_item}, 큐 항목 {queue_item}")
def create_node(self, data):
self.current_node = Node(data)
# 사용 예제
composite = CompositeDataStructure()
# 데이터 추가
composite.add_to_stack(1)
composite.add_to_stack(2)
composite.add_to_stack(3)
composite.add_to_queue("A")
composite.add_to_queue("B")
composite.add_to_queue("C")
composite.create_node("시작 노드")
[평균 구해보기]
1. 리스트
[Average와 Mean의 차이]
[소수점 자릿수 제한]
[정렬]
문자열 채워서 정렬
[부록 : 8진법 등]
[객체란?]
객체는 데이터의 집합: 객체는 클래스에서 정의된 속성(데이터)을 가지고 있는 메모리 상의 공간
[질의응답]
Q. 속성 중에 변수가 없이 값만 가지는 속성도 있나요?
Q. 객체는 속성 외의 데이터도 갖고있나요?
Q. 속성과 값의 차이
속성(Attribute)이란?
객체의 특징: 객체가 가지고 있는 고유한 특징이나 성질을 나타냄
변수와 유사: 파이썬 클래스 내부에서 정의된 변수
예시: 사람 객체의 경우, 이름, 나이, 성별 등이 속성이 될 수 있음
접근 방법: 객체 이름 뒤에 점(.)을 찍고 속성 이름을 적어 접근함 (예: person.name)
값(Value)이란?
속성에 할당된 데이터: 속성이 가리키는 실제 데이터
다양한 자료형: 숫자, 문자열, 리스트, 딕셔너리 등 파이썬에서 사용되는 모든 자료형이 될 수 있음
예시: 사람 객체의 이름 속성의 값은 "홍길동"이 될 수 있음
속성과 값의 관계
속성은 값을 담는 그릇: 속성은 값을 저장하기 위한 공간이며, 값은 속성에 할당되어 그 의미를 완성함
동적 변경: 값은 프로그램 실행 중에 변경될 수 있음. 예를 들어, 사람 객체의 나이 속성의 값은 시간이 지남에 따라 변할 수 있음
예시 코드
class Person:
def __init__(self, name, age):
self.name = name # 속성 name에 값 할당
self.age = age # 속성 age에 값 할당
# 객체 생성
person1 = Person("홍길동", 30)
# 속성 값 출력
print(person1.name) # 출력: 홍길동
print(person1.age) # 출력: 30
# 값 변경
person1.age = 31
print(person1.age) # 출력: 31
코드를 사용할 때는 주의가 필요
정리
추가 설명
[점 표기법(dot notations)]
갯수 제한은 없음.
용도
1. Accessing Methods of Nested Objects:
class OuterClass:
def __init__(self):
self.inner_object = InnerClass()
class InnerClass:
def inner_method(self):
print("Inner method called")
outer_obj = OuterClass()
outer_obj.inner_object.inner_method() # Two dot notations
import module1.module2.function3
module1.module2.function3() # Three dot notations
result = my_object.method1().method2().method3() # Multiple dot notations
[파이썬 표기법 (notations)]
1. Def Notation:
def my_function(arg1, arg2):
# Function body
return result
my_lambda = lambda arg1, arg2: arg1 + arg2
*주의사항
이하 별첨부록.
공부 중 인증화면이 나왔는데, 과연 멧돼지가 저 정도로 높이 뛰는지 궁금해져서 아래 인증화면을 저장하였음.
찾아보니, 대략 1.5m 담장도 넘을 수 있는 것으로 확인됨. 아래 이미지는 멧돼지가 담벼락 창살을 피해 2중 점프를 하는 모습.