분류 전체보기 117

[Leetcode] Container With Most Water

solution for Container With Most Water Problem) Solution) 2개의 포인터를 활용해서 시간 복잡도 O(n)에 끝낼 수 있다. max_water 변수에는 각 단계별 최대 물의 양을 저장한다. x, y 포인터 초기화하고 각각 x는 시작점, y는 끝점에 위치하고 하나씩 옮기며 최대 물의 양을 계산하고 max_water의 값과 비교하여 최종 최대 물의 양 값을 얻는다. 이때 포인터를 옮기는 과정에서 x, y 포인터가 가르키는 막대의 길이를 비교하여 길이가 짧은 막대의 포인터를 x는 +1, y는 -1로 한칸씩 옮겨야 한다. Example의 예를 들면 최초 x는 0 (height[0] = 1)을 가르키고 y는 8 (height[8] = 7)을 가르킨다. 여기서 물의 양을 ..

알고리즘 2020.06.04

[Leetcode] Two City Scheduling

solution for Two City Scheduling Problem) Solution) 문제에서 각 cost간의 차이 값을 구했을 때, 차이 값이 작으면 A 도시로 차이값이 크면 B 도시로 가는 것이 비용상 더 효율적이다. 즉 문제에서 제공한 예제에 적용해서 4명의 각 비용의 차이 값을 계산하면 [-10, -170, 350, 10]이 되고 이를 오름차순으로 정렬하면 [-170, -10, 10, 350]이 된다. 여기서 우리는 정렬된 리스트를 기준으로 좌측에서 A로 우측에서 B로 한명씩 보내게되면 최소 비용으로 모든 사람들을 A, B 도시로 반반씩 보낼 수 있게 된다. 특별한 알고리즘에 대한 지식보다는 문제에 대한 이해와 해석 능력이 필요한 문제인 것 같다. class Solution: def two..

알고리즘 2020.06.03

[Python] pickle (데이터 저장 및 불러오기)

이번 포스트에서는 정말 간단하게 python에 pickle을 활용하여 데이터를 저장하고, 저장된 데이터를 불러오는 코드를 알아보겠습니다. pickle은 파이썬의 모든 객체(object)에 대해서 있는 그대로 저장할 수 있는 모듈입니다. pickle은 객체를 바이너리 파일에 저장하기 때문에 아래와 같이 파일을 읽을 때 'wb', 'rb' 처럼 바이너리 형식을 사용해야 합니다. pickle.dump / pickle.load import pickle temp_dict = {'name': 'S', 'id': 1} # 데이터 저장 with open('filename.pkl', 'wb') as f: pickle.dump(temp_dict, f, protocol=pickle.HIGHEST_PROTOCOL) # 데이터..

[논문 리뷰] Adversarial Examples Are Not Bugs, They Are Features

paper - Adversarial Examples Are Not Bugs, They Are Features 2019년도 NIPS에서 발표된 논문으로 Adversarial Examples이 만들어지는 현상의 이유에 대해서 새로운 관점으로 해석한 논문입니다. AI 보안 이슈에서 아주 중요한 분야이기 때문에 모든 AI 연구자들에게 도움이 되는 논문이라고 생각합니다. Adversarial Example이란, 아래 보이는 왼쪽의 돼지 이미지에 아주 작은 노이즈를 더하여 오른쪽의 돼지 이미지를 만드는 것을 의미합니다. 사람의 눈으로 볼 때는 아무런 변화가 없지만, 분류 모델의 입장에서 두 이미지는 "pig"와 "airliner"로 완전히 다른 이미지로 인식됩니다. 따라서 이러한 문제는 앞서 말했듯이 AI 보안에서..

논문 리뷰 2020.05.31

[Python] Multiprocessing (프로세스 기반 병렬 처리)

프로그램의 실행 속도는 프로그래밍의 아주 중요한 요소입니다. Python에서 프로세스 기반의 병렬 처리를 통해 실행 속도를 향상 시킬 수 있는 방법에 대해서 알아보겠습니다. Python에서는 병렬 처리를 위해 multiprocessing 패키지를 제공합니다. multiprocessing에는 대표적으로 Pool과 Process가 있지만 이번 글에서는 Process에 대해서만 다루도록 하겠습니다. multiprocessing.process Process는 미리 정의한 함수를 하나의 프로세스에 할당하여 실행합니다. 이때, 각 프로세스마다 적당한 인자값을 할당하여 실행할 수 있습니다. [example code] import os from multiprocessing import Process def add_on..

Tensorflow 2.0 Install

저는 Window와 Mac을 모두 이용하는데, 주로 Anaconda를 활용해 가상환경에 모두 세팅하여 사용하고 있습니다. 따라서, 간략하게 Anaconda를 활용해서 Tensorflow 2.0을 설치하는 방법에 대해서 설명하도록 하겠습니다. Anaconda 설치 https://www.anaconda.com/ Project Interpreter에 보면 오른쪽에 add 버튼으로 새로운 Interpreter를 추가할 수 있습니다. 추가 화면에서 좌측의 Conda Environment를 클릭하면 새로운 환경을 만들거나 이미 생성된 환경 중에 선택이 가능하고, 여기서 Existing environment를 선택하고 이전 TensorFlow 설치 단계에서 생성한 Conda 환경을 Interpreter로 선택하면 완..

텐서플로우 2020.05.18

[논문 리뷰] Feature Denoising for Improving Adversarial Robustness

Paper - Feature Denoising for Improving Adversarial Robustness Facebook AI Research에서 작성한 2019년도 논문입니다. 논문에서는 Adversarial Robustness를 높이는 방법으로 Feature Denoising 기법 적용을 제안하고 여러가지 실험 결과를 공유합니다. 보통 Adversarial Example 이미지는 Pixel 레벨에서 볼 때 사람의 눈으로 구분이 거의 불가능한 수준입니다. 따라서 Pixel을 이용해서는 판단이 안되는데 그렇다면 과연 Feature 레벨에서는 어떤 다른점이 있을까?라는 생각으로 Adversarial Example의 Feature map을 확인했더니 아래 그림과 같이 차이점이 눈에 뛰게 드러나는 것을..

논문 리뷰 2020.03.27

Adversarial Attacks and Defenses

Adversarial Attack Adversarial Attack과 Defense를 설명하기 위해 아래 그림을 인용하는 것이 가장 직관적으로 이해하기 쉬울 것 같습니다. 위 그림을 우리 눈으로 보면 좌, 우측에 판다가 있고 중앙에 노이즈처럼 생긴 그림이 있습니다.. 문제는 좌측의 판다를 57.7%의 신뢰도로 "판다"라고 분류 가능한 분류기가 있다고 가정할 때, 공격자는 중앙에 보이는 것과 같은 노이즈를 주어 우측 판다 이미지를 합성하게 됩니다. 그 결과 우측 판다 이미지는 우리에게는 여전히 "판다" 이미지로 보이지만 이전의 동일한 분류기로 이미지 식별 결과 99.3%의 신뢰도로 "긴팔원숭이"로 판단하게 된다는 것 입니다. 즉, 사람이 구분할 수 없는 노이즈를 이미지에 합성시켜 인공지능이 잘못된 예측을 ..