오늘은 XAI 분야에서 유명한 논문 중 하나인, LIME에 대해서 다뤄보고자 한다. LIME은 Local Interpretable Model-Agnostic Explanations의 줄임말이다. 제목을 보면 이 모델의 특징을 잘 알 수 있는데, 1. Local한 부분을 이용한다.2. Model-Agnostic 하다. 라는 큰 특징 2가지가 보인다. 원문은 다음과 같다(Ribeiro et al., 2016).https://arxiv.org/abs/1602.04938 "Why Should I Trust You?": Explaining the Predictions of Any ClassifierDespite widespread adoption, machine learning models remain mos..
이전에 다뤘던 Activation Maximization, Saliency Map 등은 각 hidden layer의 feature map을 시각화하여 설명가능한 AI를 구현하는 방식이다. 하지만 이는 깊은 layer일수록 해석이 힘들고, 사람마다 해석이 다를 수 있으며, 약간 애매모하다는 단점이 존재한다. 이번에 다룰 LRP는 HeatMap 방식의 설명을 제공하는 방법론 중 대표적인 방법론이며, 모델의 결과를 역추적해서 입력 이미지에 HeatMap을 생성하는 방식이다. https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0130140 On Pixel-Wise Explanations for Non-Linear Classifier Deci..
이번에는 저번 논문리뷰인 saliency map을 조금 더 발전시킨, SmoothGrad라는 기법에 대해 알아보려고 한다. https://arxiv.org/abs/1706.03825 SmoothGrad: removing noise by adding noiseExplaining the output of a deep network remains a challenge. In the case of an image classifier, one type of explanation is to identify pixels that strongly influence the final decision. A starting point for this strategy is the gradient of the class sc..
이번에는 Saliency Map Visualisation을 통해서 시각화를 하는 방법을 알아볼 것이다."Deep Inside Convolutional Networks: Visualizing Image Classification Models and Saliency Maps" 라는 논문이다. 논문 원문은 https://arxiv.org/abs/1312.6034 Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency MapsThis paper addresses the visualisation of image classification models, learnt using deep Convolutional N..
AI model들은 항상 black-box라는 문제를 가지고 있다. 이 문제로 인해 모델 안에서 어떤 일들이 벌어지고 있는지를 직접 시각화하고 알아내고자 하는 시도들이 많이 있었는데, Activation Maximization (Maximization by optimization) 도 그 시도들 중에 하나이다. 특히 Activation Maximization은 CNN에서 각 Feature Map들이 표현하는 시각적 특징이 무엇인지를 시각화하려는 시도이다. CNN의 구조 중 하나를 "target"으로 고정시켜놓고, 이를 최대로 활성화시키는 입력 이미지를 찾거나 생성하는 방법이다. (여기서는 생성하는 방식을 다루도록 하겠다)참조: - Olah, et al., "Feature Visualization", D..
보통 .pop()을 쓸 때, 리스트 이름 뒤에 .pop()을 붙여서 마지막 element를 빼냈던 것 같다. 그런데 어떤 변수에다가 stack.pop() 값을 할당해줄 수 있다. 코드를 보자. 여기 보면 기준점이 되는 index를 stack.pop()으로 할당해주었다. a = stack.pop()으로 할당해주면 마지막 element의 인덱스를 가져올 수 있다. 그리고 결과를 효율적으로 저장해주는 방법인데, 코드를 보면 result를 저장할 때에 result = [0] * len(prices)로, 단순히 빈 배열인 result = [] 를 하기보다애초에 0이 각 위치에 들어가있는 상태로 초기화를 시킨다. 이렇게 저장하면 따로 위치를 관리해줄 필요 없이 result 자체에 인덱스로 접근할 수 있다.re..
오늘은, 처음의 index값을 보존할 수 있는 방법을 알아보겠습니다. 처음 index값을 보존하려면, enumerate로 아예 인덱스값이 포함된 tuple로 만들어주면 됩니다. process = deque((i, order) for i, order in enumerate(priorities)) 이런 식으로 기존 priorities의 인덱스를 i로 보존하면서 새로운 큐인 process를 만들 수 있습니다.그리고 tuple의 element는 elem[0] 이런 식으로 접근하면 됩니다.
오늘은 while문의 조건의 순서에 대해서 알아보려고 한다. 알다시피 파이썬은 왼쪽에서 오른쪽으로 코드가 읽히는데, 여기서 and 로 동일 조건임을 명시해도 먼저 써야하는 조건이 있다. 주로 리스트나 큐와 같은 배열을 순회할 때, 옆에꺼 접근하고 이러다보면 항상 list index out of range 에러를 마주치게 된다. 항상 리스트 길이 조건이 충족되었는지 조건을 먼저 작성해줘야한다. (Rule of Thumb) 코드를 보면,
오늘은 sort()와 sorted() 차이가 뭔지 적어보려고 한다. 1. sort()는 원 배열을 수정한다.2. sorted()는 원 배열을 수정하지 않고 modify된 새 배열을 리턴한다. 그러므로 sorted()가 Space Complexity를 좀 더 잡아먹을 것이다.
이번에는 python의 조건이 있는 sort()에 대해서 알아보고, tuple이 쭉 있을 때 [ (1, a), (2, b) ] 앞에 숫자에 대해서 sort 한 번, 뒤의 글자에 대해서 sort 한 번 식의 다중 sort(),그리고 이걸 lambda로 구현, 하는 걸 다뤄보자. 결론부터 보면,.sort(key = lambda x: (-x[1], x[0])) 1. key = sort의 기준! 2. 익명 함수인 lambda x 를 사용해주었다. lambda x : x[0] 을 하면 x의 0th element를 기준으로 "오름차순" 으로 정렬해준다. 3. (-x[1], x[0]) 에서 -는 내림차순, 냅두면 오름차순이며, -x[1]을 먼저 써주는 이유는 이거를 기준으로 먼저 정렬하고, 그 상태에서 ..